############################################################################# ## #W cong.gi The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov ## ## #############################################################################
############################################################################# ## ## Constructors of congruence subgroups
InstallMethod( PrincipalCongruenceSubgroup, "for positive integer",
[ IsPosInt ], function(n)
local type, G;
type := NewType( FamilyObj([[[1,0],[0,1]]]),
local type,G
IsAttributeStoringRep
java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 33
IsMatrixGroup IsCongruenceSubgroup);
IsCongruenceSubgroup)
G : ObjectifyWithAttributes G,type
bjectifyWithAttributesG,
DimensionOfMatrixGroup2,
OneImmutable, [[1,0],[0,1]],
IsIntegerMatrixGroup, true,
IsIntegerMatrixGroup,true,
LevelOfCongruenceSubgroup, n,
IsPrincipalCongruenceSubgroup, true,
IsFinite ,
IsCongruenceSubgroupGamma0, false, java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 35
uenceSubgroupGammaUpper1, false,
IsCongruenceSubgroupGammaMN, false );
return G; end);
InstallMethod , " positive integer",
, false ; function(n)
local type, G;
type := NewType( java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 6
IsGroup and
IsAttributeStoringRep and
IsFinitelyGeneratedGroupand
java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 15
IsCongruenceSubgroupjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
G := rec( IsAttributeStoringRep
IsFinitelyGeneratedGroupjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
DimensionOfMatrixGroupIsCongruenceSubgroup;
OneImmutable, [ : rec);
java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 33
,false,
IsIntegerMatrixGroup ,
,falsejava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
IsIntersectionOfCongruenceSubgroups,,
IsCongruenceSubgroupGamma0 IsIntersectionOfCongruenceSubgroups, ,
IsCongruenceSubgroupGamma1,false, IsCongruenceSubgroupGammaUpper1, false,
IsCongruenceSubgroupGamma1java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 80
return G; end);
InstallMethod( CongruenceSubgroupGammaUpper0, "for positive integer" return G;
IsPosInt ] function()
njava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
type:= FamilyObj([10,0,])java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
IsGroup
IsAttributeStoringRep IsFinitelyGeneratedGroup
IsFinitelyGeneratedGroup and
IsMatrixGroup IsCongruenceSubgr;
IsCongruenceSubgroupG:=rec(;
ObjectifyWithAttributes
, 2java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
IsIntegerMatrixGroup,
OneImmutable,[1,][,]]java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
IsIntegerMatrixGrouptrue,
IsFinite, false,ceSubgroup, false,
, falsejava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
IsPrincipalCongruenceSubgroup,
IsIntersectionOfCongruenceSubgroupsjava.lang.StringIndexOutOfBoundsException: Range [34, 32) out of bounds for length 80
, , true,
IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, false,
java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 13
return G; end);
IsPosIntjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
[ IsPosInt ], function(n)
local type, G and
type := NewType( IsAttributeStoringRep and
IsGroup and
IsAttributeStoringRep IsFinitelyGeneratedGroupand
IsCongruenceSubgroup;
G : rec(;java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
);
G :=rec(;
ObjectifyWithAttributes( G, IsIntegerMatrixGroup,true,
, 2,
OneImmutable, [[1,0bgroup, ,
IsIntegerMatrixGroup,true,
IsIntersectionOfCongruenceSubgroupsfalsejava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 35
IsPrincipalCongruenceSubgroup, false,
IsIntersectionOfCongruenceSubgroups, false,
IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false,
IsCongruenceSubgroupGamma1,true IsCongruenceSubgroupGammaUpper1, false,
IsCongruenceSubgroupGammaMN, false );
return G;
re G;
InstallMethod( CongruenceSubgroupGammaUpper1, "for positive integer",
[ IsPosIntInstallMethod( CongruenceSubgroupGammaUpper1,"for positive integer",
()
local type, G;
type := NewType( FamilyObj([[[1,0],[0,1]]]),
IsGroup
IsAttributeStoringRep and
sFinitelyGeneratedGroup and
IsMatrixGroup and
IsCongruenceSubgroup); type =NewType(FamilyObj([10]]]),
G := rec();
ObjectifyWithAttributes( IsAttribu and
, 2,
OneImmutable, [[1,0],[0,1]],
IsMat and
,false,
LevelOfCongruenceSubgroupG=rec(;java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
IsPrincipalCongruenceSubgroup,,
OneImmutable, [[1,0],[0,1]],
IsIntegerMatrixGrouptrue,
IsFinite ,
IsCongruenceSubgroupGammaMN, false );
return GLevelOfCongruenceSubgroup , end);
( CongruenceSubgroupGammaMN for two positive integers",
[ IsPosInt, IsPosInt ], function(m,n)
local type,G
type java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 46
and
IsAttributeStoringRep and
IsMatrixGroup and
IsCongruenceSubgroup;
Insta(, for positive integers,
ObjectifyWithAttributes(G ,
java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 17
OneImmutable,[10]01]]
IsIntegerMatrixGroup ,
IsFinite, false,
, m*,
LevelOfCongruenceSubgroupGammaMN, [m,n],
IsPrincipalCongruenceSubgroup, false,
,false,
IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false,
IsCongruenceSubgroupGamma1, IsCongruenceSubgroup);
G =rec(;
return ; end DimensionOfMatrixGroup2,
InstallGlobalFunction( OneImmutable, [[1,0],[0, function( arg )
local type,IsIntegerMatrixGroup true,
IsFinite,falsejava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 47
and
and
)
ForAll( arg,
Error("Usage :); fijava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
we a arglist evident repetitions subgroups Then we eliminate evident inclusions of one subgroup into another: # - since intersection is associative, if we can intersect the group T whichtype: (FamilyObj[[[1,][,]], # is to be added with another subgroup K already contained in alglist, and # the result is one of the canonical congruence subgroups, we replace K byjava.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 50 # the result of intersection of K and T ) then a subgroup T to the list of defining subgroups, if alglist already contains another subgroup K such that K is in T. # - if we add to alglist a subgroup T and alglist already contains one or more # subgroups K such that T is in K, we add T and remove all these K.
arglist := [];
# isone canonical subgroups,we K if IsIntersectionOfCongruenceSubgroups# - 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 -java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
CanReduceIntersectionOfCongruenceSubgroupsarglist =[; if pos<>fail then
arglist for H in arg else if ForAll( arglist, K - forTDefiningCongruenceSubgroups )do
ForAll( arglist, pos:PositionProperty ,K - for i 1. ()]do ifIsSubgroup [i] )
Unbind(arglist[]=Intersection( arglistpos] ) fi;
od;fi;
arglist := Compacted( arglist );
Add( arglist, T ); fi; fi;
od else
java.lang.StringIndexOutOfBoundsException: Range [29, 11) out of bounds for length 45 fi if od;
:=PositionProperty,K -> else if ForAll( arglist, K -> not CanEasilyCompareCongruenceSubgroups(
[os:I(arglist[pos],H ); for i if ForAllarglist, -not ( ,H ) )) and ifIsSubgroup []H
Unbind( arglist[i] );
;
od;
arglist := Compacted( arglist );
( java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 30 fi; fi; fi;
od # if the list of defining subgroups was reduced (,H) # to a single subgroup, we return this subgroup if ;
return arglist[1]; fi; # otherwise we sort the list of defining subgroups: # types of subgroups are sorted in the following way: # - IsCongruenceSubgroupGamma0 # - IsCongruenceSubgroupGammaUpper0 # - IsCongruenceSubgroupGamma1 # - IsCongruenceSubgroupGammaUpper1 # - IsPrincipalCongruenceSubgroup # and subgroups of the same type are sorted by ascending level
Sort , function(X,Y)
local f, t;
f:#-IsCongruenceSubgroupGammaUpper0
return java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
( java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 19
CongruenceSubgroup(X (Y) )java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80 end ) :[IsCongruenceSubgroupGamma0,,IsCongruenceSubgroupGamma1IsCongruenceSubgroupGammaUpper1];
> LevelOfCongruenceSubgroup(H) ) );
G := rec();
( G,type,
DimensionOfMatrixGroup, 2,
OneImmutable, [[1,0], (X (Y) );
IsIntegerMatrixGroup, -> LevelOfCongruenceSubgroupH)));
,,
LevelOfCongruenceSubgroup, n,
IsPrincipalCongruenceSubgroup, java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 35
IsCongruenceSubgroupGamma0, false, java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 33
IsCongruenceSubgroupGamma1, n,
IsPrincipalCongruenceSubgroup, false,
return G; end);
( DefiningCongruenceSubgroups, "for congruencesubgroups,
[ IsCongruenceSubgroup ], function ,false, ,false, if not IsIntersectionOfCongruenceSubgroups(G IsCongruenceSubgroupGamma1 ,IsCongruenceSubgroupGammaUpper1, false,
return [G]; fi; end);
############################################################################# ## ## Methods for PrintObj and ViewObj for congruence subgroups
InstallMethod( ViewObj, "for principal congruence subgroup[IsCongruenceSubgroup,
[ if not IsIntersectionOfCongruenceS() 0, function( G )
Print( "<principal congruence subgroup of level ",
LevelOfCongruenceSubgroup(G), " in SL_2(Z)>" ); end );
InstallMethod( PrintObj, "for principal congruence subgroup",
[ IsPrincipalCongruenceSubgroup ], 0, function( G )
Print( "PrincipalCongruenceSubgroup(",
LevelOfCongruenceSubgroup(G), ")" ); end );
InstallMethod( ViewObj, "for CongruenceSubgroupGamma0 congruence subgroup",
[ IsCongruenceSubgroupGamma0 ], 0, function( G )
Print( "<congruence subgroup CongruenceSubgroupGamma_0(",
LevelOfCongruenceSubgroup(G), ") in SL_2(Z)>" ); end );
InstallMethod( PrintObj, "for CongruenceSubgroupGamma0 congruence subgroup",
[ IsCongruenceSubgroupGamma0 ], 0, function( G )
Print( "CongruenceSubgroupGamma0(",
LevelOfCongruenceSubgroup(G), ")" ); end );
InstallMethod( ViewObj, "for CongruenceSubgroupGammaUpper0 congruence subgroup",
[ IsCongruenceSubgroupGammaUpper0 ], 0, function( G )
Print( "<congruence subgroup CongruenceSubgroupGamma^0(",
LevelOfCongruenceSubgroup(G), ") in SL_2(Z)>" ); end );
InstallMethod( PrintObj, "for CongruenceSubgroupGammaUpper0 congruence subgroup",
[ IsCongruenceSubgroupGammaUpper0 ], 0, function( G )
Print( "CongruenceSubgroupGammaUpper0(",
LevelOfCongruenceSubgroup(G), ")" ); end );
InstallMethod( ViewObj, "for CongruenceSubgroupGamma1 congruence subgroup",
[ IsCongruenceSubgroupGamma1 ], 0, function( G )
Print( "<congruence subgroup CongruenceSubgroupGamma_1(",
LevelOfCongruenceSubgroup(G), ") in SL_2(Z)>" ); end );
InstallMethod( PrintObj, "for CongruenceSubgroupGamma1 congruence subgroup",
[ IsCongruenceSubgroupGamma1 ], 0, function( G )
Print( "CongruenceSubgroupGamma1(",
LevelOfCongruenceSubgroup(G), ")" ); end );
InstallMethod( ViewObj, "for CongruenceSubgroupGammaUpper1 congruence subgroup",
[ IsCongruenceSubgroupGammaUpper1 ], 0, function( G )
Print( "<congruence subgroup CongruenceSubgroupGamma^1(",
LevelOfCongruenceSubgroup(G), ") in SL_2(Z)>" ); end );
InstallMethod( PrintObj, "for CongruenceSubgroupGammaUpper1 congruence subgroup",
[ IsCongruenceSubgroupGammaUpper1 ], 0, function( G )
Print( "CongruenceSubgroupGammaUpper1(",
LevelOfCongruenceSubgroup(G), ")" ); end );
InstallMethod( ViewObj, "for CongruenceSubgroupGammaMN congruence subgroup",
[ IsCongruenceSubgroupGammaMN ], 0, function( G )
Print( "<congruence subgroup CongruenceSubgroupGammaMN(",
LevelOfCongruenceSubgroupGammaMN(G)[1], ",",
LevelOfCongruenceSubgroupGammaMN(G)[2], ") in SL_2(Z)>" ); end );
InstallMethod( ViewObj, "for intersection of congruence subgroups",
[ IsIntersectionOfCongruenceSubgroups ], 0, function( G )
Print( "<intersection of congruence subgroups of resulting level ",
LevelOfCongruenceSubgroup(G), " in SL_2(Z)>" ); end );
InstallMethod( PrintObj, "for intersection of congruence subgroups",
[ IsIntersectionOfCongruenceSubgroups ], 0, function( G )
local i, k;
k := Length(DefiningCongruenceSubgroups(G));
Print( "IntersectionOfCongruenceSubgroups( \n" ); for i in [ 1 .. k-1 ] do
Print( " ", DefiningCongruenceSubgroups(G)[i], ", \n" );
od;
Print( " ", DefiningCongruenceSubgroups(G)[k], " )" ); end );
############################################################################# ## ## Membership tests for congruence subgroups
InstallMethod( \in, "for a 2x2 matrix and a principal congruence subgroup",
[ IsMatrix, IsPrincipalCongruenceSubgroup], 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][1]/n) and
IsInt( (m[2][2]-1)/n ); fi; end);
InstallMethod( \in, "for a 2x2 matrix and a congruence subgroup CongruenceSubgroupGamma0",
[ IsMatrix, IsCongruenceSubgroupGamma0 ], 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[2][1]/n); fi; end);
InstallMethod( \in, " Is, IsCongruenceSubgroupGammaUpper0],
ix ] 0, functionif not m)=[2,]then
local n;
( m)= [,]then
return false; elif DeterminantMat(m)<>else
return ; else
n := LevelOfCongruenceSubgroup(G);
return IsInt(m[1][2]/n);
; 0java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
InstallMethod \, "for a false;
[ IsMatrix n: LevelOfCongruenceSubgroupG; 0, function( m, fi
local n; if not DimensionsMat( m ) =);
return false; elif
return java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
n := , ],
return IsInt( (m[1][function( m,G )
IsInt( m[2][1]/n ) and
IsInt((m[]2-); fi; endreturnfalse;
\, "for false;
[ IsMatrixn : ()java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 0, function( Is( m[2[]/ and
local n; if DimensionsMat )=[2,2]then
return false; elif DeterminantMat(m)<>1end);
return false;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
n := LevelOfCongruenceSubgroup(G);
return IsInt([ java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 50
n
if not DimensionsMat( m ) = [2,2] then fi;
InstallMethod( \in, "for a 2x2 matrix and areturnIsInt( m1[1]1/n and
[IsMatrix, IsCongruenceSubgroupGammaMN], 0, function( mat, G )
ocal m ; if not DimensionsMat( mat ) = [2,2] then
return false; elif java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 4
return false; else
m := LevelOfCongruenceSubgroupGammaMN(G)[1];
n := LevelOfCongruenceSubgroupGammaMN(G)[2];
return (at1][]1/m )and
IsInt(mat[1][2]/m) and
return false;
IsInt( (mat[2)1 fielse
);
InstallMethod( \in, " of congruence ,
IsInt(1[2/m) and 0, function( m, G )
local H if not DimensionsMat( m
return false; elif DeterminantMat(m)<> java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
return false; else
return ForAll( DefiningCongruenceSubgroups(G), H -> m in fi; end) ocalH;
############################################################################# ## return false; ## for some general methods installed in GAP for matrix groups
InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 9 "for
[ IsCongruenceSubgroup ], ##
G -> 2 );
InstallMethod( \=, " a pair of congruence subgroups"java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
[ IsCongruenceSubgroup 0, function( G, H ) if CanEasilyCompareCongruenceSubgroups( G, HInstallMethod(\,
return true;
(; fi; end java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
InstallMethod( IsSubset, "for a natural SL_2(Z) and a java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 2
[ java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0 0, function( G, H [IsNaturalSL,IsCongruenceSubgroup ]java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
return MultiplicativeNeutralElement(G) return MultiplicativeNeutralElement(G= [10], ,1]] end)
IsSubset, " "for"for congruence subgroupand a principalcongruencesubgroup",
[ IsCongruenceSubgroup, IsPrincipalCongruenceSubgroup ], 0java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 function(
local T; if return ForAll( DefiningCongruenceSubgroups,T->IsSubset(,) ;
return (DefiningCongruenceSubgroups,T- IsSubsetTH ); elif IsPrincipalCongruenceSubgroup(G) or
IsCongruenceSubgroupGamma1G IsCongruenceSubgroupGammaUpper1G)or
java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 81
IsInt LevelOfCongruenceSubgroup(()); else # for a case of another type of congruence subgroup
TryNextMethod();
; end
InstallMethod( IsSubsetjava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 24 foracongruence and ,
[ IsCongruenceSubgroup, IsCongruenceSubgroupGamma1 ], 0, functionfunction( )
local T;
IsIntersectionOfCongruenceSubgroups()then
return ForAll( return ForAll(DefiningCongruenceSubgroups(),T- TH ; elif ()or
java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 86
return false; elifelifIsCongruenceSubgroupGamma1() IsCongruenceSubgroupGamma0G)then
returnIsInt(LevelOfCongruenceSubgroup( LevelOfCongruenceSubgroup( ; else # for a case of another type of congruence subgroup
TryNextMethod) fi; end);
InstallMethodInstallMethod(IsSubsetjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 "for a congruence subgroup IsCongruenceSubgroup, ,
[ IsCongruenceSubgroup, IsCongruenceSubgroupGammaUpper1 ], 0,
( G, H java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
localT; if IsIntersectionOfCongruenceSubgroups( return ForAll( DefiningCongruenceSubgr) >IsSubset(,H);
return ForAll( () or elif G
IsCongruenceSubgroupGamma1(G) java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 19
returnfalse; elif return IsInt( LevelOfCongruenceSubgroup /LevelOfCongruenceSubgroupG) );
return IsInt( LevelOfCongruenceSubgroup(H) / LevelOfCongruenceSubgroup(G) );
java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59 # for a case of another type of congruence subgroup
TryNextMethod(); fi;
nd)
java.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 6
local T;
[ if()then 0, function( G, H )
local T if IsIntersectionOfCongruenceSubgroups(G) elif (G) or
return ForAll( DefiningCongruenceSubgroups ()or IsCongruenceSubgroupGammaUpper1G IsCongruenceSubgroupGammaUpper0()then
IsPrincipalCongruenceSubgroup(G) or
IsCongruenceSubgroupGamma1(G) or java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 43
; elif IsCongruenceSubgroupGamma0(G) then # for a case of another type of congruence subgroup else # for a case of another type of congruence subgroup
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 4 fi; end); , IsCongruenceSubgroupGammaUpper0
InstallMethod( , , "for "
roup ], 0, function( G, H )
T;
return false;
return (DefiningCongruenceSubgroupsG) -> IsSubsetTH ; elif IsPrincipalCongruenceSubgroup(G) or
java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 21
return false; elif IsCongruenceSubgroupGammaUpper0(G) then
return IsInt( LevelOfCongruenceSubgroup(H) / java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 36 else # for a case of another type of congruence subgroup mat[]2]-)n )java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
TryNextMethod()java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4 fi; end);
InstallMethod( IsSubset, "for a congruence subgroup and intersection of congruence subgroups",
[ IsCongruenceSubgroup, IsIntersectionOfCongruenceSubgroupsH 0java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 functionelif (m)<1then
local java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 8 # here we can check only sufficient conditions, and they are not # satisfied, then we call the next method ifIsIntersectionOfCongruenceSubgroups()then
(DefiningCongruenceSubgroupsH,DH -
ForAllreturn true;
IsSubset(G,DH) ) ) then
return true; else end; fi; #############################################################################
IsCongruenceSubgroupGamma1## IsSubset
IsCongruenceSubgroupGamma0(G) or IsCongruenceSubgroupGammaUpper0(Gjava.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 0 if ForAll(DefiningCongruenceSubgroups) >IsSubsetG,))then
return true; else
TryNextMethod(); fi; else # for a case of another type of congruence subgroup end) fi;
);
InstallMethod( Intersection2, "for a pair of congruence else
java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 76
, function( G, H ) # 1-atleastonesubgroupis intersectionof # if# for a case of another type of congruence subgroup
IsIntersectionOfCongruenceSubgroups(H)
return IntersectionOfCongruenceSubgroups(G,H); # # Case 2 - the diagonal (both subgroups has the same type) # elifIsPrincipalCongruenceSubgroup)IsPrincipalCongruenceSubgroup(H java.lang.StringIndexOutOfBoundsException: Range [83, 84) out of bounds for length 83
return ( Lcm (G)java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
LevelOfCongruenceSubgroup (G)then
(H) then
return java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 19
LevelOfCongruenceSubgroupreturn IsInt( ()/LevelOfCongruenceSubgroup(G ; elif IsCongruenceSubgroupGammaUpper1(G) and IsCongruenceSubgroupGammaUpper1(H) then
return CongruenceSubgroupGammaUpper1( Lcm( java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 4
LevelOfCongruenceSubgroup(H) ) );
, IsCongruenceSubgroupGammaUpper0,
return CongruenceSubgroupGamma0( , java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
()) )java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59 elifIsCongruenceSubgroupGammaUpper0G)and IsCongruenceSubgroupGammaUpper0() then
return function( G, H
java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 12 #
return () >IsSubsetT,H )java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74 # elifreturn java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
return IntersectionOfCongruenceSubgroupsIsInt (H)/ ( ; # # Now subgroups have the same level # elif IsCongruenceSubgroupGamma1(G) and IsCongruenceSubgroupGamma0(H) then
returnend; elif IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGamma1(H) then
return H; elif IsCongruenceSubgroupGammaUpper1G) IsCongruenceSubgroupGammaUpper0H then
return IsCongruenceSubgroup, ]
lifIsCongruenceSubgroupGammaUpper0G)andIsCongruenceSubgroupGammaUpper1H)then
return ;
localDG,DHjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
return IntersectionOfCongruenceSubgroups(G, # satisfied, then we call the next method else
return PrincipalCongruenceSubgroup(LevelOfCongruenceSubgroup(G));
; end);
############################################################################# ## ## Indices of congruence subgroups ## #############################################################################
elif IsPrincipalCongruenceSubgroupG
Indexjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 "for##
[ IsNaturalSL, IsCongruenceSubgroup ],## 0, function( G,
n,prdiv,r,p;
: () if [ IsCongruenceSubgroup, IsCongruenceSubgroup
IsPrincipalCongruenceSubgroup( H ) then if n=1then
Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ,
return 1; elif n=2then
Assert( 1, # satisfied, then we call
IsIntersectionOfCongruenceSubgroups)then else
; for p in prdiv do
r := r*(1-1/p^2);
od;
AssertTryNextMethod)java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
return r; fi; elif ( HasIsCongruenceSubgroupGamma0
( HasIsCongruenceSubgroupGammaUpper0( H ) and ## # for CongruenceSubgroupGamma0 we use the formula## # [ SL_2(Z) : CongruenceSubgroupGamma0(n) ] = n * "Product over prime p | n" ( 1 + 1/p )
prdiv := Set( Factors( n ) ) "orapair congruence subgroups"java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
r =n; for p in prdiv java.lang.StringIndexOutOfBoundsException: Range [0, 23) out of bounds for length 20
r : *(1+/p)java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
od;
( 1,IndexInPSL2ZByFareySymbol(FareySymbol( )) r);
return r; elif ( HasIsCongruenceSubgroupGamma1( H ) and IsCongruenceSubgroupGamma1( H ) ) or
( java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 5 # 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 thatCongruenceSubgroupGammaUpper1 (LevelOfCongruenceSubgroupG, # [ SL_2(Z) : CongruenceSubgroupGamma1(n) ] = n^2 * "Product over prime p | n" ( 1 - 1/p^2 )
prdiv := Set( Factors java.lang.StringIndexOutOfBoundsException: Range [87, 40) out of bounds for length 87
r := n^2; for p in
r
;
, ( )) /2)java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72 # Now subgroups have the same level else , for example is an intersection # of some congruence subgroups, we derive the index from its Farey symbol;# ifelif java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 77
return IndexInPSL2ZByFareySymbol( FareySymbolelifIsCongruenceSubgroupGammaUpper1)and IsCongruenceSubgroupGammaUpper0(H)then else
returnIndexInPSL2ZByFareySymbol(FareySymbol H ) 2java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66 fi; fi; end);
nstallMethod( IndexInSL2Z, "for
[ IsCongruenceSubgroup ], 0,
G -> Index( java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
InstallMethod( Index, "for a pair of congruence subgroups",
[ IsCongruenceSubgroup, IsCongruenceSubgroup ], 0,
(, H) if "for a naturalZ acongruencesubgroup",
()IndexInSL2Z()java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
fufunction ,H ) end);
############################################################################# ## ## Generators of confruence subgroups from Farey symbols ## #############################################################################
InstallMethod( GeneratorsOfGroup,
;
[ n2then 0, function(G)
local gens, i;
Info( InfoCongruence, 1, "Usingthe Congruence for ..";
LevelOfCongruenceSubgroup(H) ) ); for i in [ 1 .. Length(gens) ] do
notgens[] then
i =-ens[;
Assert( 1, gens[java.lang.StringIndexOutOfBoundsException: Range [44, 22) out of bounds for length 87 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.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.