Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/factint/tables/brent/   (GAP Algebra Version 4.15.1©)  Datei vom 15.10.2019 mit Größe 1 kB image not shown  

SSL cong.gi   Sprache: Shell

 

#############################################################################
##
#W cong.gi                 The Congruence package                   Ann Dooms
#W                                                               Eric Jespers
#W                                                         Olexandr Konovalov
##
##
#############################################################################


#############################################################################
##
## Constructors of congruence subgroups

InstallMethod( PrincipalCongruenceSubgroup, "for positive integer",
    [IsPosInt]java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
    function(    function(G )
    local type, G;
    type := NewType( FamilyObj([[[1,0],[0,1]] Print("principalcongruence    ,
                     and
                     IsAttributeStoringRep java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 10
                     (,
                     IsMatrixGroup and
                     IsCongruenceSubgroup);
    " principal congruence subgroup"
    ObjectifyWithAttributes( G    [IsPrincipalCongruenceSubgroup]java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
      DimensionOfMatrixGroup, 2,
     ,[1,][,],
      IsIntegerMatrixGroup, true,
      IsFinite,             LevelOfCongruenceSubgroupG) ) )    
      java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 11
   IsPrincipalCongruenceSubgroup
      IsIntersectionOfCongruenceSubgroups(ViewObjjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
      IsCongruenceSubgroupGamma0 ,IsCongruenceSubgroupGammaUpper0false,
      IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1
      java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 6
    return G;
  Print < subgroupCongruenceSubgroupGamma_0" 


             (G,"  SL_2()>")    
     IsPosInt ]
    function(n)
    java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 4
    InstallMethod java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
                     IsGroup  
                     IsAttributeStoringRep and 
                     IsFinitelyGeneratedGroup and 
                     IsMatrixGroup and
                     
    G := rec();                   
    ObjectifyWithAttributes( G    (G
            Print( ( C(,java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
     ,[10,0,1]java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
      IsIntegerMatrixGroup, true,
      ,false,
      LevelOfCongruenceSubgroup, n,
   IsPrincipalCongruenceSubgroup, false,
   IsIntersectionOfCongruenceSubgroups, false
      IsCongruenceSubgroupGamma0(,
      IsCongruenceSubgroupGamma1,     "for CongruenceSubgroupGammaUpper0 CongruenceSubgroupGammaUpper0  "java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
      java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 6
    return G;
 end;
 
InstallMethod(             LevelOfCongruenceSubgroup() )inSL_2Z> ;java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
    [ IsPosInt ],
    function(n)
    local 
    type := NewTypeInstallMethod( ,
                     IsGroup and 
IsAttributeStoringRep and 
                     IsFinitelyGeneratedGroup and 
                     IsMatrixGroup and
                     p;
    G :    0java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
     G,type,
      DimensionOfMatrixGroup, 2,
      OneImmutable [[1,0][,],
      IsIntegerMatrixGroup, true,
      IsFinite, false,
      java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 14
   IsPrincipalCongruenceSubgroup,
      IsIntersectionOfCongruenceSubgroups,(ViewObj
      IsCongruenceSubgroupGamma0,     "or CongruenceSubgroupGamma1congruence subgroup"
      IsCongruenceSubgroupGamma1 ],
      IsCongruenceSubgroupGammaMN, false );
    return G;
 end); 
 

InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 6
    [       Print"congruencesubgroup CongruenceSubgroupGamma_1( 
    function(n)
    local type, G;
    type := NewType(              LevelOfCongruencejava.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 65
                     IsGroup andend ;
                     IsAttributeStoringRep and 
                      and
                     IsMatrixGroup"  congruence subgroup,
                      IsCongruenceSubgroupGamma1
G: rec(;java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
    Attributes , type 
      DimensionOfMatrixGroup, 2,
      OneImmutable, [[1,0],[0,1]],
      IsIntegerMatrixGroup, true,
      IsFinite, false,
      LevelOfCongruenceSubgroup, nLevelOfCongruenceSubgroup(G ) )java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
ongruenceSubgroup falsejava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
   java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 0
      IsCongruenceSubgroupGamma0, false"or CongruenceSubgroupGammaUpper1java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 60
      IsCongruenceSubgroupGamma1 ,,false,
      IsCongruenceSubgroupGammaMN, false );
    return G;
 end);
 

InstallMethod( CongruenceSubgroupGammaUpper1 ,
    [ IsPosInt ],
    function(n
    local type, G;
    type :      Print("  ^1(,java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
                     IsGroup and 
                     IsAttributeStoringRep and 
                     IsFinitelyGeneratedGroup and 
                     IsMatrixGroup and
                     java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 4
        "  congruence subgroup",
    ObjectifyWithAttributes( G, type, 
      DimensionOfMatrixGroup, 2,
      OneImmutable, [[1,0],[0,1]],
      IsIntegerMatrixGroup, true,
      IsFinite, false,
      LevelOfCongruenceSubgroup, n,
   IsPrincipalCongruenceSubgroup, false,
   IsIntersectionOfCongruenceSubgroups0,
      java.lang.StringIndexOutOfBoundsException: Range [0, 32) out of bounds for length 17
      IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1 LevelOfCongruenceSubgroup() ) );    
      IsCongruenceSubgroupGammaMNend)  
    return java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
 end);
 

InstallMethod( CongruenceSubgroupGammaMN, "for two positive integers",
    [IsPosInt IsPosInt ],
    function(m,n)
    local [IsCongruenceSubgroupGammaMN,
    type := java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 6
                     IsGroup and 
                     and 
                     IsFinitelyGeneratedGroup and 
                     IsMatrixGroup and
                     LevelOfCongruenceSubgroupGammaMNG[] "" 
    G :=              (G)] "in SL_2Z> ;    
    ObjectifyWithAttributes( Gend;
      java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 4
      OneImmutable"java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 56
      IsIntegerMatrixGroup,
      function G java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
      LevelOfCongruenceSubgroup, m*n,
      java.lang.StringIndexOutOfBoundsException: Range [41, 38) out of bounds for length 46
          LevelOfCongruenceSubgroupGammaMNG[],"")    
   IsIntersectionOfCongruenceSubgroups ) 
      java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 4
      lMethod ,
      IsCongruenceSubgroupGammaMN,     "or intersection  congruence subgroups"
    return G    [ IsIntersectionOfCongruenceSubgroups ,
 end;
  

InstallGlobalFunction( IntersectionOfCongruenceSubgroups,
    function(arg )
    local type, G, H, K, T, arglist, n, i, pos;
    ([[[10],01]])java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
                     IsGroup
                     IsAttributeStoringRep and 
                     IsFinitelyGeneratedGroup andfintersection congruence,
                     [ IsIntersectionOfCongruenceSubgro]
    ,
    if not ForAll( arg, IsCongruenceSubgroup ) then
function G)
    fi;
      we  a list  toeliminate repetitions  .
    # 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
    #   the result is one of the canonical congruence subgroups, we replace K 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. 
    # - if we add to alglist a subgroup T and alglist already contains one or more
## Membership tests for congruence subgroups
    arglist
    for InstallMethod i,
    for  2 matrixaprincipal ,
        for T in DefiningCongruenceSubgroups( H ) do
pos=(arglist,K - 
                 CanReduceIntersectionOfCongruenceSubgroups( K0,
          ifpos<>ail then
            arglist[pos]:=Intersection n;
          else
            if ForAll ,K-  CanEasilyCompareCongruenceSubgroups(K, T))and
               ForAll( arglist, K -> notreturn false;
              for i in [ 1 .. Length(arglist) ] do
                if  arglisti,T  then
                  Unbind( arglist[i] );
                fi;
              od
              arglist := Compacted( arglist );      ((1[]1) )andjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
              Add arglist, T );
            fi;    
          fi;
        odjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
      else
        pos:=PositionProperty( arglist, K -> 
               java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
        if pos<"  x2  and  congruence  CongruenceSubgroupGamma0"
          arglist[IsMatrix,IsCongruenceSubgroupGamma0,
        else     
          if ForAll( arglist, K -> not java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 6
             java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 12
ngtharglist)]do
              if IsSubgroup( arglist[i],       ;
                Unbind( arglist[i] );
              fi;
            od;
            arglist := Compacted( arglist );    
            Add( arglist
          fi;
        fi;  
      ;
    od;
    # if the list of defining subgroups was reduced 
    # to a single subgroup, we return this subgroup: LevelOfCongruenceSubgroup)
(arglist ) =1 
      return arglist[1];
    fifi; 
    # otherwise we sort the list of defining subgroups:
    # types of subgroups are sorted in the following way:;
# - IsCongruenceSubgroupGamma0
    # - IsCongruenceSubgroupGammaUpper0
    # - IsCongruenceSubgroupGamma1
ceSubgroupGammaUpper1
    # - IsPrincipalCongruenceSubgroup
    # and subgroups of the same type are sorted by ascending level
    Sort( arglist, 
          function(X,Y) 
          local f, t;
          f:=[IsCongruenceSubgroupGamma0,IsCongruenceSubgroupGammaUpper0,IsCongruenceSubgroupGamma1,IsCongruenceSubgroupGammaUpper1,IsPrincipalCongruenceSubgroup];
          return PositionProperty(f, t -> t(X)) < PositionProperty(f, t -> t(Y)) or
               ( PositionProperty(f, t -> t(X)) = PositionProperty(f, t -> t(Y)) and
                 LevelOfCongruenceSubgroup(X) < LevelOfCongruenceSubgroup(Y) ); 
          end );
    n := Lcm( List( arglist, H -> LevelOfCongruenceSubgroup(H) ) );                     
    G := rec();                   
    ObjectifyWithAttributes( G, type, 
      DimensionOfMatrixGroup, 2,
      OneImmutable, [[1,0],[0,1]], 
      IsIntegerMatrixGroup, true,
      IsFinite, false,
      LevelOfCongruenceSubgroup, n,
   IsPrincipalCongruenceSubgroup, false,
   IsIntersectionOfCongruenceSubgroups, true,
      IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false,
      IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, false,
      DefiningCongruenceSubgroups, arglist );
    return G;
 end);
 
InstallMethod( DefiningCongruenceSubgroups, "for congruence subgroups",
    [ IsCongruenceSubgroup ],
    function(G)
    if not IsIntersectionOfCongruenceSubgroups(G) then
      return [G];
    fi;
 end);
    
#############################################################################
##
## Methods for PrintObj and ViewObj for congruence subgroups
 
InstallMethod( ViewObj,
    "for principal congruence subgroup",
    [ IsPrincipalCongruenceSubgroup ],
    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( PrintObj,
    "for CongruenceSubgroupGammaMN congruence subgroup",
    [ IsCongruenceSubgroupGammaMN ],
    0,
    function( G )
      Print( "CongruenceSubgroupGammaMN(", 
              LevelOfCongruenceSubgroupGammaMN(G)[1], ",", 
             LevelOfCongruenceSubgroupGammaMN(G)[2], ")" );    
    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)<>1 then
      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)<>1 then
      return false;  
    else
      n := LevelOfCongruenceSubgroup(G);
      return IsInt(m[2][1]/n);
    fi;  
    end); 
    

InstallMethod( \in,
    "for a 2x2 matrix and a java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 8
    fi;
    ,
    function( m, G )
    local n;
    if not DimensionsMat( m ) = [2,2] then
      return false;
    elif DeterminantMat(mInstallMethod(\in,
      return false;
    else
      n =LevelOfCongruenceSubgroup()
      return IsInt(m[0,
    fi;java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
    endjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9


InstallMethod( \in,
    "for a    else
[IsMatrix, IsCongruenceSubgroupGamma1,
    0,
   function , java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
    local n;
    if              (2[]1/n )
      return falsejava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
    elif InstallMethod(in,
urnfalse; 
    else
      n: LevelOfCongruenceSubgroupG;
      return IsInt( (m[1][1]-1)/n ) and 
Int( m[]1]n)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
             IsInt( (m[    ifnotDimensionsMat(m) =[22] then
    fi;  
    )java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
  

InstallMethod( \in,
    "for a 2x2 matrix and a congruence subgroup java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 40
    [IsMatrix,IsCongruenceSubgroupGammaUpper1 ],
    0,
    function( m, G )
    local ;
    java.lang.StringIndexOutOfBoundsException: Range [24, 6) out of bounds for length 42
      return false;
    elif DeterminantMat(m)<>1 
      return false;  
    else
      n := LevelOfCongruenceSubgroup(G);
      return (([]1]1)n)and 
                  ,  ]java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
             IsInt( (m[2][2]- ocal m,njava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
    fi;  
    end);
    

InstallMethod( \in,
    "for a 2x2java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
    [ IsMatrix, IsCongruenceSubgroupGammaMN ],
    0,
    function( mat,      returnIsInt((at[1-)m )andjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
    local m, n;
    if not DimensionsMat( mat ) = [2,2] then
      java.lang.StringIndexOutOfBoundsException: Range [18, 12) out of bounds for length 19
t)>1 then
      return false;  
    else
    end);   
      n := java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 4
      for an intersectioncongruencesubgroups"
             mat[]2]) and 
             IsInt    0java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
             IsInt( (mat[2]    local ;
    fi; 
    end);    
    
   
InstallMethod( \in,
    "for an intersection of congruence subgroups",
    [ IsMatrixjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8

    function( mfi;  
    ocal H
    
      return false;
    elif DeterminantMat(m)<>1 then
      return false;  
    else
      return ForAll( DefiningCongruenceSubgroups(G), H -> 
    fi;  
    end);
    
    
#############################################################################
##
## Installing special methods for congruence subgroups 
## for some general methods installed in GAP for matrix groups
    
    "forfora of  "
    "for congruence subgroup",
    [ ],
    0,
    G -> 2 );  
 
 \=java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
    "for a pairelse
    [TryNextMethod)java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
    0,
    function( G, H )
    if java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
      return true;
    else
      TryNextMethod();
    fi;  
    end);


#############################################################################
##
## IsSubset
##
#############################################################################

InstallMethod( IsSubset,
    "for a     0,
    [,IsCongruenceSubgroup ,
    0,
    function( G, H )
MultiplicativeNeutralElement()[[1,0 , [0   ;
)

InstallMethod( IsSubset,
    "for a subgroup and aprincipal  "java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
    [ IsCongruenceSubgroup,    ,
    0,
    function( G, H )

    if     local ;
      (G),  ->T,H))
    elif IsPrincipalCongruenceSubgroup(      returnForAll( (G) T >IsSubset(,)java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
         IsCongruenceSubgroupGamma1()or (G)
         IsCongruenceSubgroupGamma0(G) or IsCongruenceSubgroupGammaUpper0(G) then
      return       return (LevelOfCongruenceSubgroup() / LevelOfCongruenceSubgroupG ;java.lang.StringIndexOutOfBoundsException: Index 83 out of bounds for length 83
    else
      # for a case of another type of congruence subgroup  
      TryNextMethodfi  
        end); 
    end); 
    
InstallMethod( IsSubset,
    "for a congruence subgroup and CongruenceSubgroupGamma1",
     "for a congruence subgroup  CongruenceSubgroupGamma1"java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
    0,
    (G,H)
    local T;
    ifIsIntersectionOfCongruenceSubgroupsG 
      (DefiningCongruenceSubgroupsG)  >IsSubset(,))
    elif    IsPrincipalCongruenceSubgroupG)or 
         IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGammaUpper0(G) then
      false
     (G)or (G)then
      return IsInt( LevelOfCongruenceSubgroup(H) /      return  (H)/LevelOfCongruenceSubgroup()) 
     else
      # for a case of another type of congruence subgroup  
()
    fi;  
    end); 
    
InstallMethod IsSubset,
    "for a congruence subgroup and CongruenceSubgroupGammaUpper1",
[,IsCongruenceSubgroupGammaUpper1 ]java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
    0,
    function( G,  function( G, H)
    local T;
    if     local ;
oups(G,T- (T,))java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
    elifIsPrincipalCongruenceSubgroupG) or 
         IsCongruenceSubgroupGamma1elifIsPrincipalCongruenceSubgroup()or 
      return false;
    elif IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGammaUpper0(G)       return false;
      (H) (G) ;java.lang.StringIndexOutOfBoundsException: Index 83 out of bounds for length 83
    else
      # for a case of another type of congruence subgroup  
      TryNextMethod();
    fi;  
    end); 
    
InstallMethod( IsSubset,
     nd) 
    [ IsCongruenceSubgroup
    0,
    function( G, H )
    ;
     IsIntersectionOfCongruenceSubgroupsG)java.lang.StringIndexOutOfBoundsException: Range [50, 51) out of bounds for length 50
      return ForAll( DefiningCongruenceSubgroups(G    local ;
    elifIsPrincipalCongruenceSubgroup) java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
IsCongruenceSubgroupGamma1() (G)or G then
      return falseelif java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 45
    elif IsCongruenceSubgroupGamma0(G) then
      return IsInt      return false;
    else
      # for a case of another type of congruence subgroup  
      TryNextMethod();
    fi;  
    end);     
    
InstallMethod( IsSubset,
    "fi;  
enceSubgroup,  ],
    0,
     )
    local T;
    if IsIntersectionOfCongruenceSubgroups(G) then
       ForAll(DefiningCongruenceSubgroupsG) T - (,));
    elif IsPrincipalCongruenceSubgroup(G) or 
             #
      false;
    elif IsCongruenceSubgroupGammaUpper0(G) then
      return (LevelOfCongruenceSubgroup()/LevelOfCongruenceSubgroup()); 
    else
      # for a case of another type of congruence subgroup  
      java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 5
    fi;  
    end)java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
    
InstallMethod( IsSubset,
    "for a congruence subgroup and intersection of congruence    elif ()and ()then
    [, IsIntersectionOfCongruenceSubgroups,
    0 IsCongruenceSubgroupGammaUpper0()and (H 
    function( G, H       H;
     DG ;
    # here we can check only sufficient conditions, and they are not 
    # satisfied, then we call the next method
    if java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 8
      if ForAll( DefiningCongruenceSubgroups(H), DH -fi                                             
                 ForAll( java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 4
                         IsSubset(G,DH) ) ) then
        return true;
      else
        TryNextMethod();
      
     (G)or
         IsCongruenceSubgroupGamma1(InstallMethod(Index,
         IsCongruenceSubgroupGamma0(G) or IsCongruenceSubgroupGammaUpper0(G) then
      if ForAll( DefiningCongruenceSubgroups(H), DH -> IsSubset(G,DH) ) then
        return true;
      else
        TryNextMethod();
      fi;  
    else
      # for a case of another type of congruence subgroup  
      TryNextMethod();
    fi;  
    end);    
    
    
#############################################################################
##
## Intersection2
##
#############################################################################


InstallMethod(local  prdiv ,p;
    "n :=LevelOfCongruenceSubgroupH;
    [],
    0,
    function( G, H )
    #
    # Case 1 - at least one subgroup is an intersection of congruence subgroups
    #
    if IsIntersectionOfCongruenceSubgroups(G) or
       IsIntersectionOfCongruenceSubgroups(H) then
      return IntersectionOfCongruenceSubgroups(G,H);
    #
    # Case 2 - the diagonal (both subgroups has the same type)
    # 
    elif IsPrincipalCongruenceSubgroup(G) and IsPrincipalCongruenceSubgroup(H) then
      return PrincipalCongruenceSubgroup( Lcm  Congruencepackage GeneratorsOfGroup ..);
                                             java.lang.StringIndexOutOfBoundsException: Range [73, 72) out of bounds for length 80
    elif IsCongruenceSubgroupGamma1(G) and if i]in G 
 gens[]: -ensi]java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
                          LevelOfCongruenceSubgroup(H) ) );
    elif IsCongruenceSubgroupGammaUpper1(G) and IsCongruenceSubgroupGammaUpper1(H) then
      return CongruenceSubgroupGammaUpper1( Lcm( LevelOfCongruenceSubgroup(G),
                          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
    #
    elif LevelOfCongruenceSubgroup(G) <> LevelOfCongruenceSubgroup(H) then
      return IntersectionOfCongruenceSubgroups(G,H);
    #
    # Now subgroups have the same level
    #
    elif IsCongruenceSubgroupGamma1(G) and IsCongruenceSubgroupGamma0(H) then
      return G; # so all properties and attributes of G will be preserved
    elif IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGamma1(H) then
      return H; 
    elif IsCongruenceSubgroupGammaUpper1(G) and IsCongruenceSubgroupGammaUpper0(H) then
      return G;
    elif IsCongruenceSubgroupGammaUpper0(G) and IsCongruenceSubgroupGammaUpper1(H) then
      return H;
    elif IsCongruenceSubgroupGamma0(G) and  end ;
      return IntersectionOfCongruenceSubgroups(G,H);
    else
      return PrincipalCongruenceSubgroup(LevelOfCongruenceSubgroup(G)##
    ##
    end);
    

#############################################################################
##
## Indices of congruence subgroups
##
#############################################################################

    
InstallMethod( Index,
    "for a natural SL_2(Z) and a congruence subgroup",
    [ IsNaturalSL, IsCongruenceSubgroup ],
    0,
    function( G, H )
    local n, prdiv, r, p;
    n := LevelOfCongruenceSubgroup(H);     
    if HasIsPrincipalCongruenceSubgroup( H ) and 
       IsPrincipalCongruenceSubgroup( H ) then
      if n=1 then
        Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = 1 );
        return 1;
      elif n=2 then
        Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = 6 );
        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 );
 
 
#############################################################################
##
#E
##

Messung V0.5 in Prozent
C=93 H=92 G=92

¤ Dauer der Verarbeitung: 0.253 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

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.