Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346############################################################################# ## #W idgrp1.g GAP group library Hans Ulrich Besche ## Bettina Eick, Eamonn O'Brien ## ## This file contains the identification routines for groups with order ## the product of maximal 3 primes. ## ############################################################################# ## #F ID_AVAILABLE_FUNCS[ 1 ] ## ID_AVAILABLE_FUNCS[ 1 ] := SMALL_AVAILABLE_FUNCS[ 1 ]; ############################################################################# ## #F ID_GROUP_FUNCS[ 1 ]( G, inforec ) ## ## order p ## ID_GROUP_FUNCS[ 1 ] := function( G, inforec ) return 1; end; ############################################################################# ## #F ID_GROUP_FUNCS[ 2 ]( G, inforec ) ## ## order p ^ 2 ## ID_GROUP_FUNCS[ 2 ] := function( G, inforec ) if IsCyclic( G ) then return 1; else return 2; fi; end; ############################################################################# ## #F ID_GROUP_FUNCS[ 3 ]( G, inforec ) ## ## order p * q ## ID_GROUP_FUNCS[ 3 ] := function( G, inforec ) local typ; if IsAbelian( G ) then typ := "pq"; else typ := "Dpq"; fi; return Position( NUMBER_SMALL_GROUPS_FUNCS[ 3 ]( Size( G ), inforec ).types, typ ); end; ############################################################################# ## #F ID_GROUP_FUNCS[ 4 ]( G, inforec ) ## ## order p ^ 3 ## ID_GROUP_FUNCS[ 4 ] := function( G, inforec ) if IsAbelian( G ) then if IsCyclic( G ) then return 1; elif IsElementaryAbelian( G ) then return 5; fi; return 2; else if Size( G ) = 8 then if Length( Filtered( AsList( G ), x-> Order( x ) = 2 ) ) = 1 then return 4; fi; return 3; fi; if Maximum( List( GeneratorsOfGroup( G ), x -> Order( x ) ) ) = FactorsInt( Size( G ) )[ 1 ] then return 3; fi; return 4; fi; end; ############################################################################# ## #F ID_GROUP_FUNCS[ 5 ]( G, inforec ) ## ## order p ^ 2 * q ## ID_GROUP_FUNCS[ 5 ] := function( G, inforec ) local n, p, q, s1, s2, typ; # get primes n := Size(G); p := FactorsInt(n); q := p[3]; p := p[1]; # compute the sylow subgroups s1 := SylowSubgroup( G, q ); s2 := SylowSubgroup( G, p ); if IsAbelian( G ) then if IsCyclic( s2 ) then typ := "p2q"; else typ := "ppq"; fi; elif IsElementaryAbelian( s2 ) then if n = 12 and IsNormal( G, s2 ) then typ := "a4"; else typ := "Dpqxp"; fi; elif not IsTrivial( Centralizer( s2, s1 ) ) then typ := "Gp2q"; else typ := "Hp2q"; fi; return Position( NUMBER_SMALL_GROUPS_FUNCS[ 5 ]( Size( G ), inforec ).types, typ ); end; ############################################################################# ## #F ID_GROUP_FUNCS[ 6 ]( G, inforec ) ## ## order p * q ^ 2 ## ID_GROUP_FUNCS[ 6 ] := function( G, inforec ) local n, p, q, s1, s2, typ, lat, nor, non, x, s, A, B, C, AC, BC, PO,id; # get primes n := Size(G); p := FactorsInt(n); q := p[3]; p := p[1]; # compute the sylow subgroups s1 := SylowSubgroup( G, q ); s2 := SylowSubgroup( G, p ); if IsAbelian( G ) then if IsCyclic( s1 ) then typ := "pq2"; else typ := "pqq"; fi; elif ( p <> 2 ) and ( (q+1) mod p = 0 ) then typ := "Npq2"; elif IsCyclic( s1 ) then typ := "Mpq2"; elif not IsTrivial( Centralizer( s1, s2 ) ) then typ := "Dpqxq"; else lat := List( ConjugacyClassesSubgroups(s1), Representative ); lat := Filtered( lat, t -> Size(t) = q ); nor := []; non := []; x := 1; while x <= Length(lat) and 0 = Length(non) and Length(nor) < 3 do if IsNormal( G, lat[x] ) then Add( nor, lat[x] ); else Add( non, lat[x] ); fi; x := x + 1; od; if 0 = Length(non) and 2 < Length(nor) then # Kpq2; typ := 1; else # Lpq2 while x <= Length(lat) and Length(nor) < 2 do if IsNormal( G, lat[x] ) then Add( nor, lat[x] ); fi; x := x + 1; od; A := GeneratorsOfGroup( nor[1] )[1]; B := GeneratorsOfGroup( nor[2] )[1]; C := GeneratorsOfGroup( s2 )[1]; AC := A^C; x := 1; PO := 0; while PO <> AC do x := x+1; if x^p mod q = 1 then PO := A^x; fi; od; BC := B^C; s := 1; PO := 0; while s < q and PO <> BC do s := s+1; if s mod p <> 0 and s mod p <> 1 then PO := B^((x^s) mod q); fi; od; s := s mod p; if ((1/s) mod p) < s then s := (1/s) mod p; fi; typ := s; fi; fi; return Position( NUMBER_SMALL_GROUPS_FUNCS[ 6 ]( Size( G ), inforec ).types, typ ); end; ############################################################################# ## #F ID_GROUP_FUNCS[ 7 ]( G, inforec ) ## ## order p * q * r ## ID_GROUP_FUNCS[ 7 ] := function( G, inforec ) local n, p, q, r, s1, s2, s3, typ, PO, A, C, AC, x, s, y, B, BC, id; # get primes n := Size(G); p := FactorsInt(n); r := p[3]; q := p[2]; p := p[1]; # compute the sylow subgroups s1 := SylowSubgroup( G, r ); s2 := SylowSubgroup( G, q ); s3 := SylowSubgroup( G, p ); if IsAbelian( G ) then typ := "pqr"; elif IsNormal( G, s3 ) then typ := "Dqrxp"; elif not IsAbelian( ClosureGroup( s1, s2 ) ) then typ := "Hpqr"; elif IsAbelian( ClosureGroup( s1, s3 ) ) then typ := "Dpqxr"; elif IsAbelian( ClosureGroup( s2, s3 ) ) then typ := "Dprxq"; else # find <A> and <C> C := GeneratorsOfGroup( SylowSubgroup(G,p) )[1]; A := GeneratorsOfGroup( SylowSubgroup(G,r) )[1]; AC := A^C; PO := 0; s := 1; while AC <> PO do s := s+1; if s mod r <> 1 and s^p mod r = 1 then PO := A^s; fi; od; # correct <C> x := First( [2..r-1], t -> t^p mod r = 1 ); s := LogMod( x, s, r ); C := C^s; # now find <B> B := GeneratorsOfGroup( SylowSubgroup(G,q) )[1]; BC := B^C; PO := 0; s := 1; while BC <> PO do s := s+1; if s mod r <> 1 and s^p mod r = 1 then PO := B^s; fi; od; # and find <s> y := First( [2..q-1], t -> t^p mod q = 1 ); s := LogMod( s, y, q ) mod OrderMod( y, q ); typ := s; # the typ is Gpqr( s ) fi; return Position( NUMBER_SMALL_GROUPS_FUNCS[ 7 ]( Size( G ), inforec ).types, typ ); end;