############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. ## This file's authors include Frank Celler, Bettina Eick. ## ## Copyright of GAP belongs to its developers, whose names are too numerous ## to list here. Please refer to the COPYRIGHT file for details. ## ## SPDX-License-Identifier: GPL-2.0-or-later ## ## This file contains the methods for groups with a polycyclic collector. ##
cgs := CanonicalPcgs( InducedPcgsWrtFamilyPcgs(grp) ); if cgs = FamilyPcgs(grp) then
d; filen:=len java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
return cgs; end );
############################################################################# ## #M CanonicalPcgsWrtHomePcgs( <grp> ) ##
InstallMethod (Ghomejava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Range [32, 22) out of bounds for length 45
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 15
turn(java.lang.StringIndexOutOfBoundsException: Range [52, 48) out of bounds for length 56 end;
pa := FamilyPcgs(grp); if HasPcgs(grp) for java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 41
)
fi fi;
igs:InducedPcgsByGenerators paGeneratorsOfGroupgrp) ; if igs = pa truejava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fi;
[ IsGroup ],,
returnInducedPcgsWrtHomePcgs); end java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
InstallMethod( InducedPcgsWrtFamilyPcgs##
and java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 36
)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 if## if ##
return Pcgs(G); fi;
;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
SetGroupOfPcgs (ind, G##
return ind## BH: changed Pcgs to G -> ParentPcgs (Pcgs(G)) end )
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[ IsPcGroup##
InducedPcgsWrtFamilyPcgs);
############################################################################# ## #M InducedPcgs( <pcgs>,<G> ) ##
alFunctionInducedPcgs p,G)
local cache, i, igs;
if not IsPcgs(pcgs) then
Error"pcgs ";
p=Pcgs();
p
Error("InducedPcgs(< solvable";
;
if HasParentG then
: ComputedInducedPcgses);
i := 1;
i< (ache)do if cache[i]cs:ChiefSeries()
i+; fi;
i := i + 2;
d;
pcs:[];
SetGroupOfPcgs (igs );
:[] if not HasPcgs(G) then
SetPcgs (G, igs); fi;
# set home pcgs stuff
not G java.lang.StringIndexOutOfBoundsException: Range [28, 29) out of bounds for length 28
(, ; fi; if IsIdenticalObj (HomePcgs(G), pcgs) then
(,igs) fi;
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Range [19, 3) out of bounds for length 19
############################################################################# ## #M InducedPcgsOp ##
InstallMethod (InducedPcgsOp, "sift existing pcgs",
,[ IsGroup andHasPcgs] function (pcgs, G pcs
local seq
depths#############################################################################
len, # length of the sequence ##
x, # a group element
d; # depth of x
=()
seq := [];
depths := [];
len := 0;
inReversed Pcgs ())java.lang.StringIndexOutOfBoundsException: Range [37, 38) out of bounds for length 37 # sift x through seq
d : DepthOfPcElementpcgs, )
pos :java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 7
while=gens);
= pcgs seq[os];
d = java.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 44
pos := PositionSorted (depths, dG=fam,IsSolvableGroupand IsFinite
od ,pcgs,,,GeneralizedPcgspcgs) if G;
Error ( else
seq{[pos+1..len+1]} := seq{[pos..len]};
+]}:= [.}
seq[pos]IsCollsElms,
depths[pos] := d;
and java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
function( gens, id )
od;
G,pcgsjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 end);
############################################################################# ## #M ComputedInducedPcgses ##
InstallMethod (ComputedInducedPcgses, and
GAsList,id
############################################################################# ## #F SetInducedPcgs( <home>,<G>,<pcgs> ) ##
InstallGlobalFunctionS,function(home,,) end) if not java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 0
G,)java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
; if IsIdenticalObj( IsMultiplicativeElementWithInverseByPolycyclicCollector
Append ( if IsIdenticalObj(HomePcgs(G),home) then
SetInducedPcgsWrtHomePcgs(G,pcgs); fi; fi;
SetGroupOfPcgs (pcgs, G); end)
# this is the best we can do.:=fam,and,
(G java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
(G )then fail;
java.lang.StringIndexOutOfBoundsException: Range [10, 8) out of bounds for length 11 end##
############################################################################# ## #M Pcgs( <pcgrp> ) ##
InstallMethod( Pcgs,IsElmsColls,
,
true,
and ], 0]
2, # rank this methodjava.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
InstallMethod( Pcgs, "for a group with return SiftedPcElement(,)=One()
true,
) 1,
InducedPcgsWrtHomePcgs
InstallMethod( #M <elm> in <pcgrp>
[ IsGroup(,
java.lang.StringIndexOutOfBoundsException: Range [29, 26) out of bounds for length 29
############################################################################# ## #M Pcgs( <whole-family-grp> ) ##
InstallMethod( Pcgs, "for
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
)
############################################################################# ## #M GeneralizedPcgs( <G> ) ## # This used to be an immediate method. It was replaced by an ordinary # method as the attribute is set when creating pc groups.
InstallMethod(
############################################################################# ## #M HomePcgs( <G> ) ## ## BH: changed Pcgs to G -> ParentPcgs (Pcgs(G)) ##
InstallMethod(java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
############################################################################# ## #M PcgsChiefSeries( <pcgs> ) ##
InstallMethod ," chiefjava.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 68
[IsGroup java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 45 functionif p)< ppcgs (() java.lang.StringIndexOutOfBoundsException: Range [95, 96) out of bounds for length 95
localSiftedPcElementpcgs ) java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 61
p:=Pcgs(G); if p=fail java.lang.StringIndexOutOfBoundsException: Range [0, 16) out of bounds for length 11
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0 fi; if not java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 2
SetParentAttr, fi;
cs:=ChiefSeries(G);
csi:=and java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 64
java.lang.StringIndexOutOfBoundsException: Range [0, 3) out of bounds for length 0
pcs=]
ins:=[0]; for ############################################################################# # extend the pc sequence. We have a vector space factor, so we can # simply add *some* further generators.
u=(G[+]); for j java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 68 ififjava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 50
Add(pcs) #NC is safe
u=ClosureSubgroupNC,j) fi;
od; if java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Error("pcgs## fi;
Add(## since one has to fetch the pcgs only once.
od;
:(cs1;
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 19
SetGroupOfPcgs ( java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 # store the indices
= InducedPcgsWrtFamilyPcgs
: java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 end);
############################################################################# ## #M GroupWithGenerators( <gens> ) . . . . . . . . . . . . group by generators #M GroupWithGenerators( <gens>, <id> ) ## ## These methods override the generic code. They are installed for ## `IsMultiplicativeElementWithInverseByPolycyclicCollectorCollection' and ## automatically set family pcgs and home pcgs. ##
InstallMethod( GroupWithGenerators(G,pcgsjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
methodfor pc elementscollection,
true, [ IsCollection and
yclicCollectorCollection and
IsFinite] SetPcgs U ) # override methods for `IsList' or `IsEmpty'. (pcgs,U) 10,
java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 75
local G,fam,id,pcgs;
java.lang.StringIndexOutOfBoundsException: Range [6, 4) out of bounds for length 40
pcgs:=DefiningPcgs( java.lang.StringIndexOutOfBoundsException: Range [45, 43) out of bounds for length 49
id:=One(gens[( then
pc groups are always finite and gens is finite.
G:=MakeGroupyObj(fam, IsSolvableGroup and IsFinite,
AsList(gens),java.lang.StringIndexOutOfBoundsException: Range [0, 23) out of bounds for length 13
FamilyPcgs,pcgs,HomePcgs,pcgs,GeneralizedPcgs,pcgs);
return G; end );
InstallOtherMethod( GroupWithGenerators, "method for pc
, and
IsMultiplicativeElementWithInverseByPolycyclicCollectorCollection
IsFinite,
java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 27
, function( gens, id )
local G,,java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
fam:=FamilyObj(gens field: (RelativeOrderOfPcElement pcgs1]))
el
# pc groups are always finite and gens is finite.
G:=return VectorSpace( field, Immutable( IdentityMat( dim, field ) ) );
AsList(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
FamilyPcgs,pcgs,HomePcgs,pcgs##
return ## end );
InstallOtherMethod( java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 35 "methodfor empty pc collectionand java.lang.StringIndexOutOfBoundsException: Range [57, 56) out of bounds for length 58
d IsEmpty,
IsMultiplicativeElementWithInverseByPolycyclicCollector] , # override methods for `IsList' or `IsEmpty'. 10, function( empty, id )
local G,fam,pcgs;
fam:= CollectionsFamily( FamilyObj( id ) );
pcgs:=DefiningPcgs(ElementsFamily(fam));
gens :=GeneratorsOfGroup(arg[])
G:=MakeGroupyObj(fam, IsSolvableGroup arg[]
empty,id,
FamilyPcgs,,,GeneralizedPcgs,java.lang.StringIndexOutOfBoundsException: Range [59, 58) out of bounds for length 60
return G; end );
############################################################################# ## #M <elm> in <pcgrp> ##
InstallMethod \n, "for pc gens := a : [];
msColls fi
IsGroup java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
], 2, # rank this method higher than the following one
############################################################################# ## #M <elm> in <pcgrp> ##
InstallMethod( \in,# linear := function( x, g ) "for pcgs # PcElementByExponentsNC( pcgs, x )^g ) * One(field);
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 8
,
IsGroup matExponentsConjugateLayerji*ne(field)java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
], 1
function;
local pcgs, java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 11
pcgs := InducedPcgsWrtHomePcgs#############################################################################
ppcgs := ParentPcgs (pcgs); if Length( AffineActionLayer, arg
TryNextMethod) fi; if elm in java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 21
return SiftedPcElement(InducedPcgsWrtHomePcgs(grp)ifIsPcgs( arg[1 else
return false; fi; end );
############################################################################# ## #M <elm> in <pcgrp> ##
InstallMethod in "for pcgs fi;
IsElmsColls, : []
MultiplicativeElementWithInverse
IsGroup and elif(arg )
]] 0,
function( elm, grp transl:=arg[];
local pcgs, ppcgs;
for pcgs in #java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
ppcgs := ParentPcgs (pcgs); if Length (pcgs) < java.lang.StringIndexOutOfBoundsException: Range [0, 33) out of bounds for length 7
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 46
return V:= Immutable( IdentityMat(Length))
############################################################################# ## #M <pcgrp1> = <pcgrp2> ##
InstallMethod "pcgs computable groups using java.lang.StringIndexOutOfBoundsException: Range [0, 38) out of bounds for length 2
java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 17
[ IsGroup
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 64 0java.lang.StringIndexOutOfBoundsException: Range [43, 44) out of bounds for length 43
unction( java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 23 if HomePcgs(left Ggensjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
java.lang.StringIndexOutOfBoundsException: Range [23, 21) out of bounds for length 24 fi;
return CanonicalPcgsWrtHomePcgs([] ) end );
############################################################################# ## #M <pcgrp1> = <pcgrp2> ##
InstallMethod( \=, "pcgs computable groups using family pcgs",
IsIdenticalObj,
[ IsGroup and HasFamilyPcgs and HasCanonicalPcgsWrtFamilyPcgs,
IsGroup and HasFamilyPcgs and HasCanonicalPcgsWrtFamilyPcgs ], 0,
function( left, right ) if FamilyPcgs(left) <> FamilyPcgs(right) then
TryNextMethod(); fi;
return CanonicalPcgsWrtFamilyPcgs(left)
= CanonicalPcgsWrtFamilyPcgs(right); end );
############################################################################# ## #M IsSubset( <pcgrp>, <pcsub> ) ## ## This method is better than calling `\in' for all generators, ## since one has to fetch the pcgs only once. ##
(IsSubset, "mat:ImmutableMatrixCharacteristic(one,true)
IsIdenticalObj
[ IsGroupod
IsGroup ], 0,
(grp sub
local pcgs, id, g;
pcgs := InducedPcgsWrtFamilyPcgs(grp);
id := One(grp); forg sub do if SiftedPcElement( pcgs,IsFunction,
return false; fi;
od;
return true;
end );
############################################################################# ## #M SubgroupByPcgs( <G>, <pcgs> ) ##
InstallMethod( SubgroupByPcgs, "subgroup with pcgs",
true, [java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 15 function( java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 6
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 12
U : AffineActionpcgs",
SetSize(U,Product java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 13
java.lang.StringIndexOutOfBoundsException: Range [19, 16) out of bounds for length 19
AffineActionAsList ), java.lang.StringIndexOutOfBoundsException: Range [59, 51) out of bounds for length 62 # home pcgs will be inherited if
SetInducedPcgsWrtHomePcgs(U,pcgs); fi; if java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 2
IsInducedPcgsWrtSpecialPcgs( pcgs )
HasSpecialPcgs( G )IsGroup java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 32
SetInducedPcgsWrtSpecialPcgs( U pcgs ); fi;
return U;
);
pcgs := arg[1 pcgsU : InducedPcgs(homeU)
dim := if ( <(pcgsH ifIsBound(arg[2
field )java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 elif dim > GeneratorsOfGroup H))
field := GF( =SubgroupByPcgs GroupOfPcgshome ,new ; else
Error("trivial vectorspace, need field \n"returnN; fi;
return VectorSpace( field, java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 0 end );
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 if Length( arg ) = java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
(arg[1
java.lang.StringIndexOutOfBoundsException: Range [39, 37) out of bounds for length 48 elif new := InducedPcgsByPcSequenceAndGenerators( home, pcgsU, [g] );
gens := AsList( arg[1] ); else
gens := arg[1]; # SetHomePcgs( N, home );
pcgs := arg[2]; elif return ;
;
pcgs := fi;
# in case the layer is trivial############################################################################# if Length( pcgs ) = 0then
java.lang.StringIndexOutOfBoundsException: Range [30, 13) out of bounds for length 53 fi;
# construct matrix rep
field := GF( RelativeOrderOfPcElement,
# the following code takes too much time, as it has to create obvious pc # elements again from vectors with 1 nonzero entry. # V := Immutable( IdentityMat(Length(pcgs),field) ); # linear := function( x, g ) # return ExponentsOfPcElement( pcgs, # PcElementByExponentsNC( pcgs, x )^g ) * One(field); # end; # return LinearAction( gens, V, linear );
#this is done much quicker by the following direct code:
m:=[] ( java.lang.StringIndexOutOfBoundsException: Range [49, 43) out of bounds for length 52 for i in
mat:=[]; for j in pcgs java.lang.StringIndexOutOfBoundsException: Range [0, 20) out of bounds for length 12
Add(for
od;
mat:=ImmutableMatrix(field, od;
Add(m,at;
od;
return m;
java.lang.StringIndexOutOfBoundsException: Range [5, 3) out of bounds for length 6
# in the trivial case we cannot do anything if Length( pcgs ) = java.lang.StringIndexOutOfBoundsException: Range [30, 31) out of bounds for length 30
Error("layer is trivial returnU fi;
# construct matrix rep
=GF(java.lang.StringIndexOutOfBoundsException: Range [48, 41) out of bounds for length 61
: Immutable Lengthpcgs,field
linear := function( x, =(home, h)
return ExponentsConjugateLayerpcgs
pcgs, x)g)*One();
;
returnod; end );
function( Ggens, V, linear, transl )
local mats, gens, zero,one, g, mat, i, vec;
mats := []
gens:=V;
zero:=Zero(V[1][1]);
one (pag N) for SetInducedPcgsWrtHomePcgs(N, ;
mat := List(
vec (U N ) for i in [ 1 .r Njava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
mat[i] := ShallowCopy( mat[i] );
Add( mat[i], zero );
od;
Add( vec, one );
Add( mat, vec );
mat:=ImmutableMatrix(Characteristic(one),mat,true);
Add( mats, mat );
;
return ;
IsFunction,
], 0,
V linear,transl )
return AffineAction( GeneratorsOfGroup(G), V, linear, transl ); end );
InstallOtherMethod( AffineAction,"group2",
true,
[ IsGroup,
IsList,
IsMatrixhome : HomePcgs(U)java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
IsFunction
IsFunction ], 0, function( G, gens, V, linear, java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 29
java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 end );
############################################################################# ## #M ClosureGroup( <U>, <H> ) ## ## use home pcgs ##
InstallMethod( ClosureGroup, "groupswith home pcgs",
IsIdenticalObj,
HasHomePcgs
IsGroup and HasHomePcgsfor iin 1.(orb]do
,
function( U, H )
local homeSetHomePcgs(L ;
home: HomePcgs ) if home <> HomePcgsip=(home,orb[];
TryNextMethod(); fi;
pcgsU: home);
pcgsH := InducedPcgs(home ijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 if Length etGroupOfPcgs(ip,;
new: ( pcgsH
GeneratorsOfGroup( U ) );
new := InducedPcgsByPcSequenceAndGeneratorsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
GeneratorsOfGroup( H ) ); fi#######################################################################
N := SubgroupByPcgs( #M Core( <U>, <V> ) # SetHomePcgs( N, home ); # SetInducedPcgsWrtHomePcgs( N, new );
return,
endjava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 16
############################################################################# ## #M ClosureGroup( <U>, <g> ) ## ## use home pcgs ##
InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 17 "groups with home pcgs",
IsCollsElms, # start with <U>.
= 0,
function( U, g )
home := HomePcgs( U );
pcgsU := InducedPcgsWrtHomePcgsfor in ReversedpcgsV)do if not g in GroupOfPcgs(C ;
TryNextMethod(); fi;
hen
return U; else
new := InducedPcgsByPcSequenceAndGenerators( home, pcgsU, [g] );
:= SubgroupByPcgs( GroupOfPcgs(home), new ); # SetHomePcgs( N, home ); # SetInducedPcgsWrtHomePcgs( N, new );
return N; fi;
end );
############################################################################# ## #M CommutatorSubgroup( <U>, <V> ) ##
InstallMethod( CommutatorSubgroup, "groups with home pcgs",
true,
[ IsGroup and HasHomePcgs,
IsGroup and ## 0,
function( U, V )
local pcgsU, pcgsV, home, C, u, "pcgs computable groups using special pcg
# check
home := HomePcgs(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 if home <> HomePcgs( V ) then
); fi;
: InducedPcgsWrtHomePcgs(;
pcgsV := InducedPcgsWrtHomePcgs(V);
# catch trivial cases
(pcgsU or pcgsV)=0 java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
return TrivialSubgroup( GroupOfPcgs(home) ); fi;
U
return java.lang.StringIndexOutOfBoundsException: Range [0, 30) out of bounds for length 24 fi;
# compute commutators
C := []; for u in pcgsU do for v java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 28
AddSet( in0.1] ] java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
od;
od;
C := Subgroup( GroupOfPcgs( home ), C );
C := NormalClosure( ClosureGroup(U,V;
# that's it
return C;
end );
############################################################################# ## #M ConjugateGroup( <U>, <g> ) ##
InstallMethod(d: next-start; "groups with home pcgs",
IsCollsElms,
[ IsGroup and HasHomePcgs,
], 0,
function( U, g )
local N;
# <g> must lie in the home
home : HomePcgs(U) if not g in GroupOfPcgsmats : LinearActionLayerspec, pcgsL )
(; fi;
# shift <g> through <U>
pcgs :=#computeseries
id := Identity( : Immutable (,GF()))]
g := SiftedPcElement( pcgs, g );
# catch trivial case if IsEmpty(pcgs) or g = id then
return fi;
# conjugate generators
forjava.lang.StringIndexOutOfBoundsException: Range [20, 21) out of bounds for length 20
(Concatenation(, ;
d := DepthOfPcElement( Add( comps, Sum( List,x- p^ Length while h <> id and [] )
h := java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
d := DepthOfPcElement( home, h );
od; if h <> id then
pag[d] := h; fi;
od;
# <pag> is an induced system
pagphi = phi*(java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 35
N := Subgroup(order:;
me);
pag =0 ; ;
SetGroupOfPcgs (pag, N);
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 15
# maintain useful information
UseIsomorphismRelation );
return N;
end );
############################################################################# ## #M ConjugateSubgroups( <G>, <U> ) ##
InstallMethod( ConjugateSubgroups, "groups with home pcgs",
IsIdenticalObj,
[ IsGroup and HasHomePcgs,
IsGroup and HasHomePcgs ], 0,
function( G, U )
local pcgs, home, f, orb, i, L, res, H,ip ,;
# check the home pcgs are compatible
home : ; if home <> HomePcgs(G#compute
(; fi;
:GroupOfPcgs( home ;
# get a canonical pcgs for <U>
: CanonicalPcgsWrtHomePcgs(U);
# <G> acts on this <pcgs> via conjugation
:List,i[) #was: CanonicalPcgs( HomomorphicInducedPcgs( home, c, g ) );;
returnreturn ; end;
# compute the orbit of <G> on <pcgs>
orb :java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 14
res := List( orb, ReturnFalse ); for i in [1..Length(orb)] do G )base,)
L := Subgroupjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
SetHomePcgs( L, home )[ java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
f not(([i]
ip:=InducedPcgsByPcSequenceNC , else
ip:=orb[i]; fi;
SetInducedPcgsWrtHomePcgs( ,ip )java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
SetGroupOfPcgs (ip, L);
res[i] := L;
od;
return res;
function( V, U )
local pcgsV, C, java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 0
# catch trivial cases
pcgsV := Pcgs(V); if IsSubset( U, V ) or IsTrivial(U)
; fi;
<>
C := java.lang.StringIndexOutOfBoundsException: Range [32, 29) out of bounds for length 32
all subgroupsconjugate # all generators of V and its powers
for v in Reversed(pcgsV) pcgs =InducedPcgsWrtHomePcgsU);
repeat
N := ConjugateGroup( C, v ) return U if C <> N then
C := Intersection( C, N ); fi;
until C = N; if IsTrivial(C) then
return C; fi;
od
return C;
end );
############################################################################# ## #M EulerianFunction( <G>, <n> ) ##
InstallMethod( EulerianFunction, "pcgs computable groups using special pcgs",
true java.lang.StringIndexOutOfBoundsException: Range [24, 22) out of bounds for length 26
[ IsGroup tmp< then
IsPosInt ], 0
(G n
local spec, first, weights, m, i, phi, start,
next, p, d, j, pcgsS, pcgsN, pcgsL, mats,
modu, max, series, comps tmp =InducedPcgsByPcSequenceAndGenerators K,M);
spec := SpecialPcgs( G );
Length spec) =0then1; fi
first := LGFirst( spec );
weights := LGWeights( spec );
m := Length( spec );
# the first head
i := 1;
phi := 1; while i <= Length(first)-1 and
weights[first[i]][1] =# SetHomePcgs( K, home );
start := java.lang.StringIndexOutOfBoundsException: Range [0, 22) out of bounds for length 0
next
p := weights[start][3];
d := next - start; for j in [0. forsource a java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 55
phi := phi * (p^n -local p;
od; if phi = 0then p := Pcgs();
i := i + 1;
od;
# the rest while i < if Length ) = 0then
start := first[i];
next := first[i+1];
p = [start][3]
d := next - start; if weights[start][2] java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
,# the supergroup (of <H> and <U>), the home pcgs
pcgsNHp,#apcgs <>
pcgsL := pcgsS mod
mats := LinearActionLayer( spec, pcgsL ,# elementary abelian series in <G> through <U>
modu := GModuleByMats( mats, GF(p) );
max : ( modu)
# compute series
series := [ Immutable( IdentityMat(d, GF( KcapH,LcapH,# pcgs' ofintersections with H>
comps = [;
sub := series[1]; while Length( max ) > 0do
sub := SumIntersectionMat( sub nexpoindstep,Ldep,allcentjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 ifif IsTrivial(U then
new := max; else
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
RankMat( Concatenation(inequal:=alse
;
Add(:true
Add( series, sub );
max :=
od;
# run down series
home:=PcgsElementaryAbelianSeries(G);
index := Length( series[j] ) - Length( series[j+1] );
order := p^index;
phi := phi * ( order^n - comps[j] if phi = 0then return phi; fi;
od;
index := Length( Last(series) );
order := p^java.lang.StringIndexOutOfBoundsException: Range [36, 29) out of bounds for length 36
phi := phi * (java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0 if phi# else
order := p^ (eas +1] )do
phi := phi * ( order^n );
java.lang.StringIndexOutOfBoundsException: Range [21, 18) out of bounds for length 41 fi;
i := i +
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
return phi;
end);
(,true[Ijava.lang.StringIndexOutOfBoundsException: Range [63, 61) out of bounds for length 63
[java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 29
# the table of marks
)
############################################################################# ## #M LinearAction( <gens>, <basisvectors>, <linear> ) ##
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 28
true,
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 13
IsMatrix,
IsFunction], 0,
N :Kp ;# modulo pcgs representing the kernel
=(,,NLdep);
# catch trivial cases if Length( gens ) = 0then
return [java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fi;
# compute matrices if Length(base)>0then if inequalthen
( , -linear(y, ))truejava.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74 else
mats:
;
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
return mats;
function( G, base, linear )
return LinearAction( GeneratorsOfGroup( G ), base, if (java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 39 end );
function( pcgs, base, linear
return LinearAction( base ; end );
InstallOtherMethod LinearAction
true,
[ IsGroup,
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
IsMatrix,
IsFunction ], 0,
function( G, gens, base, linear )
return LinearAction(## end );
############################################################################# ## #M NormalClosure( <G>, <U> ) ##
InstallMethod( NormalClosureOp, "with home "
true,
[ IsGroup and HasHomePcgs,
IsGroup and HasHomePcgs ], 0,
function( G, U )
local pcgs, home, gens, subg, function( G, g)
# catch trivial case
pcgs := java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 6 if Length(pcgs) = 0then
return U; fi;
home := HomePcgs(U); if home <> HomePcgs(G) then
TryNextMethod(); fi;
# get operating elements
gens
gens: - pcgs java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
P=()java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
hin ( H do
K := ShallowCopy( pcgs );
repeat
:=[; for g in gens do for u G=(,);
tmp:= g u ); if tmp <> id then
AddSet( M, tmp ); fi;
od; ############################################################################# #M RepresentativeAction( <G>, <d>, <e>, OnPoints ) using affine methods
tmp := CanonicalPcgs( tmp );
subg := Filtered( tmp, x -[IsGroupand IsFinite
K := tmp;
until 0 = Length(subg);
K := SubgroupByPcgs # SetHomePcgs( K, home ); # SetInducedPcgsWrtHomePcgs( K, tmp );
K
end );
############################################################################# ## #M Random( <pcgrp> ) ## ## "for a random source and a pcgs computable groups",
[ IsRandomSource, IsGroup and CanEasilyComputePcgs and IsFinite ], functionr, grp
local p IsCollsCollsElms,[IsGroup and CanEasilyComputePcgs IsGroup and
p :=(H,,) if Length( p ) = 0then
return One( grp d java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 else
return Product( p, x -> x^Random(rs, ,cent # elementary abelian factor, for affine action fi; end );
BindGlobal( "CentralizerSolvableGroup", function(H,U,elm)
local G, home, # the supergroup (of <H> and <U>), the home pcgs
Hp, .
inequal, # G<>H flag
eas, elementary abelian series in <G> through <U>
step, # counter looping over <eas>
L, members of <eas>
Kp,Lp, # induced and modulo pcgs's
KcapH,LcapH, # pcgs's of intersections with <H> Hjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
N, cent, # elementary abelian factor, for affine action
cls, # classes in range/source of homomorphism
opr, # (elm^opr)=cls.representative
nexpo,indstep,Ldepif not(,NT
# Treat the case of a trivial group. if IsTrivial( U ) then
return H; fi;
if IsSubgroup( homePcgsElementaryAbelianSeries
G:=H;
inequal:=false; else
G:=ClosureGroup( H, U );
inequal:=true eas:java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 14 fi;
home:=HomePcgs(G); if not HasIndicesEANormalSteps(home) then
home:=PcgsElementaryAbelianSeries(G); fi; # Calculate a (central) elementary abelian series with all pcgs induced # w.r.t. <home>.
if IsPGroup( G ) then
home:=PcgsCentralSeries(G);
);
java.lang.StringIndexOutOfBoundsException: Range [38, 33) out of bounds for length 40
I(
home:=PcgsElementaryAbelianSeries(G#java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
:java.lang.StringIndexOutOfBoundsException: Range [35, 29) out of bounds for length 36
cent:=PcClassFactorCentralityTest;
fi; ;
indstepodjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
Hp:=InducedPcgs(home,H);
# Initialize the algorithm for the trivial group.
step:=1; while IsSubset( eas[ step +
step:=step + 1;
od;
L :=eas[ step ];
Ldep:=indstep[step];
Lp:=InducedPcgs(home,L); if inequal then
LcapH:=NormalIntersectionPcgs( home, Hp, Lp );
=eas[step];
cls:=[rec( representative:=elm,centralizer:=H,
centralizerpcgs:=InducedPcgs(home,H) )];
opr:=One( U );
# Now go back through the factors by all groups in the elementary abelian # series. for step in [ step + 1 .. Length( eas ) ] do
# We apply the homomorphism principle to the homomorphism G/L -> G/K. # The actual computations are all done in <G>, factors are # represented by modulo pcgs.
Kp:=Lp;
L :=eas[ step ];
Ldep:=indstep[step];
Lp:=InducedPcgs(home,L );
N :=Kp mod Lp; # modulo pcgs representing the kernel
allcent:=cent( 1 . if allcent=false then
java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 fi;
# #T What is this? Obviously it is needed somewhere, but it is # #T certainly not good programming style. AH # SetFilterObj( N, IsPcgs );
if inequal then
KcapH :=LcapH;
LcapH :=NormalIntersectionPcgs( home : ( ;
N!.capH:=KcapH mod LcapH; #T See above # SetFilterObj( N!.capH, IsPcgs ); else
Njava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12 fi;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if allcent
or cent(home, cls[ 1 ].centralizerpcgs, N, Ldep ) then
cls:=CentralStepClEANS( home,H, U, N, cls[ 1 ], cl := CentralStepClEANS( home,G, H, N, cl,true
cls:=GeneralStepClEANS( home, ; fi;
opr:=opr * tra := tra=tra*cloperatorjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 if IsModuloPcgs(cls[1].cengen) then
cls[1].centralizerpcgs
cls[1].centralizerpcgs: fijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 fi;
;
if not IsBound(cls[1].centralizer) then
cls[1].cl:=ConjugateSubgroup.entralizer -)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54 fi;
cls:= Assert(2,IsSubset)
return cls return
end );
############################################################################# ## #M Centralizer( <G>, <g> ) . . . . . . . . . . . . . . using affine methods ##
InstallMethod( CentralizerOp, "pcgs i in GeneratorsOfGroup
IsCollsElms,
[ od
G=(,G 0, # in solvable permutation groups, backtrack seems preferable
function( G, g([java.lang.StringIndexOutOfBoundsException: Range [62, 61) out of bounds for length 72
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 end );
InstallMethod(F ElementaryAbelianSeries( <list> ) "pcgs computable groups",
IsIdenticalObj,
[ IsGroup and CanEasilyComputePcgs and IsFinite,
IsGroup and CanEasilyComputePcgs ,# there is a generic groups function with value 0 0, # in solvable permutation groups, backtrack seems preferable,i, ,,java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
(G )
local h,P;
P:=Parent 1S(Last()
S:java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 28
G := CentralizerSolvableGroup( ;
od;
G:=AsSubgroup(P,G);
Assert(2,ForAll(GeneratorsOfGroup enforce the same parent for 'HomePcgs' purposes.
j->Comm(iN:[]java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
return G; end );
############################################################################# ## #M RepresentativeAction( <G>, <d>, <e>, OnPoints ) using affine methods ##
InstallOtherMethod( RepresentativeActionOp, "element conjugacy in pcgs computable groups", IsCollsElmsElmsX,
[ IsGroup and InducedPcgs(home
IsMultiplicativeElementWithInverse,
IsMultiplicativeElementWithInverse
IsFunction if IsuminNthen 0,
function( G, d, efi; if opr <> OnPoints or not (IsPcGroup(G) or (d ( .java.lang.StringIndexOutOfBoundsException: Range [35, 32) out of bounds for length 35
not (d in G and e in Gjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
TryNextMethod(); fi;
return ClassesSolvableGroup( G, 4,rec(candidates: java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 end );
############################################################################# ## #M CentralizerModulo(<H>,<N>,<elm>) full preimage of C_(H/N)(elm.N) ##
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 66
IsCollsCollsElms,[IsGroup and CanEasilyComputePcgs, IsGroup and
CanEasilyComputePcgs, Reversed( CanonicalPcgsWrtFamilyPcgs function(H,NT,elm)
local G, # common parent
home pInputPcGroup( <U>, <name> ) . . . . . . . . . . . . gap input string
eas## Return this input as string. The group will be named <name>,the
ea2, # used for factor series
L, # members of <eas>
,Lp#
KcapH
N, cent, # elementary abelian factor, for affine action
tra, # transversal for candidates
nexpo,indstep,Ldep,allcent,
cl, i; # loop variables
# Treat trivial cases. if Index(H,NT)=1 or (HasAbelianFactorGroup(H,NT =java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 36
or elm in NT then
return H; fi;
if elm in H then
G:=H; else
G:=losureGroupH; # is the subgroup still normal
notjava.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 32
Error("subgroupAdd(ines,";=f;\n"; fi; fi;
:HomePcgs) if not HasIndicesEANormalSteps(home) then
home:=PcgsElementaryAbelianSeries(G); fi;
# Calculate a (central) elementary abelian series.
eas:=fail; if IsPGroup( G ) then
home:=PcgsPCentralSeriesPGroup(G);
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if NT in eas then
cent ; else#
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 30 fi; fi;
k:;
home:= while k <= Length(list list[]= dok: + 1od;
eas:=EANormalSeriesByPcgsif>( Ijava.lang.StringIndexOutOfBoundsException: Range [55, 48) out of bounds for length 55
cent:=PcClassFactorCentralityTest; fi;
indstep:=IndicesEANormalSteps(java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 33
# series to NT
ea2:=List(eas,i->str=",);
eas:= ; for for i:java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 32 if not i in eas then
Add(eas,i); fi;
od; for i in eas do if not HasHomePcgs(i) then
SetHomePcgs(i,ParentPcgs(home list>1then fi;;
od;
Hp:=InducedPcgs(home,H);
# Initialize the algorithm for the trivial group.
step := 1; while IsSubset( eas[ step + 1 ], H ) do
step := step + 1; :count+Length);
od;
L := eas[ step ];
Lp := InducedPcgs(home, L ); if not IsIdenticalObj( G, H ) then
gs Hp Lp )java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 fi;
cl neO()then
(linesConcatenation",),
=(,H))java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
tra := One( H l,,"java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
# cls := List( candidates, c -> cl ); # tra := List( candidates, c -> One( H ) );
tra:=One(H);
# Now go back through the factors by all groups in the elementary abelian
# for step in [ step + 1 .. Length( eas ) ] do
Kp := Lp;
L: [step ;
Ldep:=indstep[step]; :=ommg[][)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
Lp := InducedPcgs(home, L );
N := Kp mod Lp; #SetFilterObj( N, IsPcgs );
allcent:= (lines,oncatenation""String)""Stringi"", if (ne,]")
nexpo:=LinearActionLayerAddlinesC(""()",i),java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72 fi; if not IsIdenticalObj( G, H ) then
KcapH := LcapH;
LcapH := NormalIntersectionPcgs( home, Hp, Lp );
NcapH : modLcapH; else
N!.capH := N; fi;
cl.candidates := cl.representative; if allcent
or cent(home,cl.centralizerpcgs(")\"java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
cl := CentralStepClEANS( home,G, H lines; else
cl := Add(lines,"Print( fi;
= * if IsModuloPcgs(cl.cengen) .
cl.centralizerpcgs:=cl.cengen; else
cl.centralizerpcgs:=InducedPcgsByPcSequenceNC(home,cl.cengen); fi;
od;
if not IsBound(cl.centralizer) then
cl.centralizer:=SubgroupByPcgs(G,cl.centralizerpcgs); fi;
cl:= lines:=newLines
Assert(2 od
(2IsSubsetGcl);
return cl;
end);
InstallMethod(CentralizerModulo,"group centralizer via generators",
IsFamFamFam,[IsGroup and CanEasilyComputePcgs, IsGroup and
CanEasilyComputePcgs, IsGroup],0, function(G,NT,U)
local i,P;
P:=Parent(G); for i in GeneratorsOfGroup(U) do
G:=CentralizerModulo(G,NT,i);
od;
G:=AsSubgroup## otherwise the power presentation.
return G; end);
# enforce solvability check.
RedispatchOnCondition(CentralizerModulo,true,[IsGroup,IsGroup,IsObject],
[IsGroup and InstallGlobalFunction PrintPcPresentation functionGcommBool
############################################################################# ## #F ElementaryAbelianSeries( <list> ) ##
InstallOtherMethod( ElementaryAbelianSeries,"list of pcgs computable groups",
true,[IsList and IsFinite], 1, # there is a generic groups function with value 0 function( S )
local home,i, N, O,
( java.lang.StringIndexOutOfBoundsException: Range [46, 44) out of bounds for length 55
TryNextMethod i+.]
;
eck if<(Last)then
S := ShallowCopy( S );
Add( S, TrivialSubgroup(S[1]) java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 fi;
# start with the elementary series of the first group of <S>
L := ElementaryAbelianSeries( S if*] pcgsi *java.lang.StringIndexOutOfBoundsException: Range [51, 49) out of bounds for length 57 # enforce the same parent for 'HomePcgs' purposes.
home:=HomePcgs(S[1]);
N := [ S[ 1 ] ]fi for i in [ 2 .. Length( S ) - 1 ] do
O := L;
L := [ S[ i ] ]; for E in O do
I := IntersectionSumPcgs(home, InducedPcgs(home,E),
InducedPcgs(home,S[ i ]) );
I.sum:=SubgroupByPcgs(S[1],I.sum);
I.
. Nthen
Add( N, I.sum ); fi; if not I.intersection in L then
Add( L, I.############################################################################ fi;
od;
od; for E in L do if not E in N then
Add( N, E ); fi;
od;
return N; end);
############################################################################# ## #M \<(G,H) . . . . . . . . . . . . . . . . . comparison of pc groups by CGS ##
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12 function( G, H if IsAbelian()
return (G
< Reversed( java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 36 end);
############################################################################# ## #F GapInputPcGroup( <U>, <name> ) . . . . . . . . . . . . gap input string ## ## Compute the pc-presentation for a finite polycyclic group as gap input. ## Return this input as string. The group will be named <name>,the ## generators "g<i>". ##
InstallGlobalFunction( GapInputPcGroup, function(U,name)
local gens,
wordString,
newLines,
lines,
ne,
true,
# <lines> will hold the various lines of the input for gap,they are # concatenated later.
lines:=[];
# Get the generators for the group <U>.
:)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
# Initialize the group and the generators.
Add(m
Add(lines,":=function()\nlocal "); for i in [1 .. Length(gens)] do
Add(lines,"g");
Add(lines,String(ino# its normalizer
Add(lines,",");
od;
Add(lines,"r,f,g,rws,x;\n");
Add(lines# p, # orbit pos.
Add(lines,
Add(lines,") opcgs,#(
for i in [1 .. Length(gens)] opfun,# operation function
Add(lines,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
:=SubgroupG,(),
Addlinesjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
Add(lines,String(i) ;
Add(lines,"];\n" );
od;
(linesr=n"; # A function will yield the string for a word.
wordString:=function(a)
local k,l,list,str,count;
list:=ExponentsOfPcElement(gens,a);
k:=1 while k <= Length:java.lang.StringIndexOutOfBoundsException: Range [40, 38) out of bounds for length 63 if k > Length(list) then return List(e-Image) if list[k] <> 1then
str:=Concatenation("g",String(k),"^if G.java.lang.StringIndexOutOfBoundsException: Range [47, 42) out of bounds for length 47
e:!java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 43 else
str:=Concatenation("g",String(k)); fi;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 for l in [k + 1 .. Length(list)] do if count > 60then
str :=Concatenation(# find the largest abelian quotient
:java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
;
count:=count - Length(str); if list[l] > 1then
# Add the power presentation part. for in[ .
ne:=gens[i]^RelativeOrderOfPcElement(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if ne<>Oneifthen
Add(lines,Concatenation("[",String(i)#UU:=ShallowCopy(min);
wordString(java.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 16 if i<Length(gens) then
# opera else
(mpcgsListu,>^e) fi; fi;
od;
Add(lines,"];\nfor x in r do #if UU<>u then
Add(lines,"r:=[\n
# Add the commutator presentation part. for i in [1java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8 for[+ .Length(gens)]o
ne:=Comm(gens[j],gens[i]); if ne<>One(U) then # this function computes the orbit in a well-defined order that permits
Add(lines,Concatenation orb:Pcgs_OrbitStabilizer(,,,)
wordString(ne),"],\n")); else
Add(orb=orb;
wordString(ne),"]\n"# Error("len!"); fi; fi;
od;
od;
in do SetCommutator(([]x2,x[3);n)
Add(lines,"return GroupByRwsNC(
(";n)
Add(lines,name);
Add(lines,":=");
Add(lines,name);
Add(lines,"();\n");
Add(lines,"Print(\"#I A group of order \",Size(");
Add(lines,name);
Add(lines,"),\" has been defined.\\n\");\n");
,Print\It iscalled );
Add(lines,name);
# nno:=Normalizer(no,fv); while Length(lines) > 1do if Length(lines) mod 2 = 1then
Add(lines,""); fi;
newLines:=[]; for i in [1## nocl:=NormalClosure(no,fv);
newLines[i]:=Concatenation(lines[2*i-1],lines[2*i]);
od;
lines:=newLines;
od;
IsString(lines[1]);
return lines[1];
end );
############################################################################# ## #F PrintPcPresentation( <grp>, <commBool> ) ## ## Display the pc relations of a pc group. ## If <commBool> is true, then the commutator presentation is printed, ## otherwise the power presentation. ## Trivial commutators / powers are not printed. ## The generators are named "g<i>". ## The returned boolean indicates if there are commuting generators. ##
InstallGlobalFunction( PrintPcPresentation, function(G, commBool)
local pcgs, n, F, gens, i, pis, exp, t, h, commPower# orb:=Product([1..Length(orb)],i->lop[i]^orb[i]);
pcgs:=Pcgs(G);
n:=Length(pcgs);
F := FreeGroup( n, "g" );
gens := GeneratorsOfGroup( F );
pis := RelativeOrders# fi;
# compute the orders of the pc-generators for i in [1..n] do
exp := ExponentsOfRelativePower# NORMALIZE_IGS(mpcgs,min);
# minrep:=one; for h in [i+1..n] do
t := t * gens[h]^exp[h-i];
od; if IsOne( t ) then
t := "id"; fi;
Print(gens[i], "^", pis[i], " = ", t, "\n");
od;
# compute the commutators / conjugation # of all pairs of pc-generators
trivialCommutators := false; for i in [1..n] do for j in [i+1..n] do if pcgs[j] * pcgs[i] = pcgs[i] * pcgs[j] then
trivialCommutators := true;
continue; fi; if commBool then
commPower := Comm( pcgs[j# minrep:=o; else
commPower := pcgs[j]^pcgs[i]# fi; fi;
exp := ExponentsOfPcElement( pcgs, commPower ){[i+1..n]};
t := One( F ); for h in [i+1..n] do
t := t * gens[h]^exp[h-i :=java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 46
od; if commBool then
Print("[", gens V:=PreImage(iso,V); else
Print(gens[j], "^", gens[i]); fi;
Print(" = ", t, "\n");
od;
od;
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 6 end );
############################################################################# ## #M Display( <grp> ) ##
InstallMethod( Display, "for a pc group",
[ IsPcGroup ], function( G )
local n, function(,U) if IsTrivial(G) then
Print("trivial pc-group\n");
return; fi;
n := Size(Pcgs(G)); if IsOne(n) then
Print("cyclic pc-group with 1 pc-generator and the relation:
(cl,G;
SetRepresentativecl,) fi;
java.lang.StringIndexOutOfBoundsException: Range [30, 26) out of bounds for length 62
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 14
Print("java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 then
(java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 59 fi; endOnPoints IsSubsetGU)andIsSubset(,) then
############################################################################# ## #M Enumerator( <G> ) . . . . . . . . . . . . . . . . . . enumerator by pcgs ##
llMethod( Enumerator,"finite pc computable groups",true,
[ IsGroup and CanEasilyComputePcgs and IsFinite ], 0,
G -> EnumeratorByPcgs( Pcgs( G ) ) );
############################################################################# ## #F CanonicalSubgroupRepresentativePcGroup( <G>, <U> ) ##
InstallGlobalFunction( CanonicalSubgroupRepresentativePcGroup, function(G,U)
local e, # EAS
pcgs, # himself
iso, # isomorphism to EAS group
start, # index of largest abelian quotient
i, # loop
m, # e[i+1]
pcgsm, # pcgs(m)
mpcgs, # pcgs mod pcgsm
if Sizeser[i])<izen) then
fv, # <V,m>
fvgens, # gens(fv)
no, # its normalizer
orb, # orbit
,
nno, # growing normalizer
min,
minrep, # minimum indicator p, # orbit pos.
one, # 1
abc, # abelian case indicator
nopcgs, #pcgs(no)
te, # transversal exponents
opfun, # operation function
ce; # conj. elm
if not IsSubgroup(G,U) then
Error("#W CSR Closure\n");
:Subgroup(Parent(G),Concatenation(GeneratorsOfGroup(G),
GeneratorsOfGroup(U))); fi;
# compute a pcgs fitting the EAS
pcgs:=PcgsChiefSeries(G);
e:=ChiefNormalSeriesByPcgs(pcgs);
if not IsBound(G!.java.lang.StringIndexOutOfBoundsException: Range [58, 49) out of bounds for length 58 # test whether pcgs is family induced
m:=List(pcgs,i->ExponentsOfPcElement(FamilyPcgs(java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 10
G!.chiefSeriesPcgsIsFamilyInduced:=
ForAll(m,i->Number(i,j->j<>0)=1) and ForAll(m,java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 9
and m=Reversed(Set(m));
not . then # compute isom. &c.
V:=PcGroupWithPcgs(pcgs);
roupHomomorphismByImagesNC(G,V,pcgs,FamilyPcgs(V));
G!.isomorphismChiefSeries:=iso;
G!.isomorphismChiefSeriesPcgs:=FamilyPcgs(Image(iso));
G!.isomorphismChiefSeriesPcgsSeries:=List(e,i-Image(iso,i)); fi; fi;
if not G!.chiefSeriesPcgsIsFamilyInduced then
iso:=G!.isomorphismChiefSeries;
pcgs:=G!.isomorphismChiefSeriesPcgs;
e:=G!.isomorphismChiefSeriesPcgsSeries;
U:=Image(iso,U);
G:=Image(iso); else
iso:=false; fi;
#pcgs:=Concatenation(List([1..Length(e)-1],i-> # InducedPcgs(home,e[i]) mod InducedPcgs(home,e[i+1]))); #pcgs:=PcgsByPcSequence(ElementsFamily(FamilyObj(G)),pcgs); ##AH evtl. noch neue Gruppe
# find the largest abelian quotient
start:=2; while start<Length(e) and HasAbelianFactorGroup
start:=start+1;
od;
#initialize
V:=U;
one:=One(G);
ce:=One(G);
no:=G;
for i in [start..Length(e)-1] do # lift from G/e[i] to G/e[i+1]
m:=e[i+1];
pcgsm
mpcgs:=pcgs mod pcgsm;
fvgens:=GeneratorsOfGroup(V); if true then
(java.lang.StringIndexOutOfBoundsException: Range [20, 16) out of bounds for length 57 #UU:=ShallowCopy(min); # NORMALIZE_IGS(mpcgs,min); #if UU<>min then # Error("hier1"); #fi; # trim m-part
)
# operation function: operate on the cgs modulo m
opfun:=function(u,e)
u:=CorrespondingGeneratorsByModuloPcgs(mpcgs,#M CanEasilyComputePcgs( <pcgrp> ) . . . . . . . . . . . . . . . . pc group #UU:=ShallowCopy(u); # NORMALIZE_IGS(mpcgs,u); #if UU<>u then # Error("hier2"); #fi;
# trim m-part
u:=List(u,i->CanonicalPcElement(pcgsm(CanEasilyComputePcgsIsGroup java.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 69
return u; end; else
min#M CanEasilyTestMembership
opfun:=OnPoints; fi;
# this function computes the orbit in a well-defined order that permits # to find a transversal cheaply
orb:=Pcgs_OrbitStabilizer(nopcgs,false,min,nopcgs,opfun);
nno:=orb.stabpcgs;
abc:=orb.lengths;
orb:=orb.orbit; #if Length(orb)<>Index(no,Normalizer(no,fv)) then # Error("len!"); #fi;
# determine minimal conjugate
minrep:=one; for o in [2..Length(orb)] do if orb[o]<min then
min:=orb[o];
minrep:=o; fi;
od;
# compute representative if IsInt(minrep) then
te:=ListWithIdenticalEntries(Length(nopcgs),0);
o:=2; while minrep<>1do while abc[o]## they should *not* inherit `CanEasilyComputePcgs' automatically.
o:=o+1;
od;
te[o-1]:=-QuoInt(minrep-1,abc[o]);
minrep:=(minrep-1) mod abc[o]+1;
od;
te:=LinearCombinationPcgs(nopcgs,te)^-1; if opfun(orb[1],te)<>min then
Error("wrong repres!"); fi;
minrep:=te; fi;
# # # nno:=Normalizer(no,fv); # # rep:=RightTransversal(no,nno); # #orb:=List(rep,i->CanonicalPcgs(InducedPcgs(pcgs,fv^i))); # # # try to cope with action on vector space (long orbit) ## abc:=false; ## if Index(fv,m)>1 and HasElementaryAbelianFactorGroup(fv,m) then ## nocl:=NormalClosure(no,fv); ## if HasElementaryAbelianFactorGroup(nocl,m) then ### abc:=true; # try el. ab. case ## fi;; ## fi; # # if abc then # nocl:=InducedPcgs(pcgs,nocl) mod pcgsm; # nopcgs:=InducedPcgs(pcgs,no) mod pcgsm; # lop:=LinearActionLayer(Group(nopcgs),nocl); #matrices for action # fvgens:=List(fvgens,i->ShallowCopy( # ExponentsOfPcElement(nocl,i)*Z(RelativeOrders(nocl)[1])^0)); # TriangulizeMat(fvgens); # canonize # min:=fvgens; # minrep:=one; # for o in rep do # if o<>one then # # matrix image of rep # orb:=ExponentsOfPcElement(nopcgs,o); # orb:=Product([1..Length(orb)],i->lop[i]^orb[i]); # orb:=List(fvgens*orb,ShallowCopy); # TriangulizeMat(orb); # if orb<min then # min:=orb; # minrep:=o; # fi; # fi; # od; # # else # min:=CorrespondingGeneratorsByModuloPcgs(mpcgs,fvgens); # NORMALIZE_IGS(mpcgs,min); # minrep:=one; # for o in rep do # if o<>one then # if Length(fvgens)=1 then # orb:=fvgens[1]^o; # orb:=orb^(1/LeadingExponentOfPcElement(mpcgs,orb) # mod RelativeOrderOfPcElement(mpcgs,orb)); # orb:=[orb]; # else # orb:=CorrespondingGeneratorsByModuloPcgs(mpcgs,List(fvgens,j->j^o)); # NORMALIZE_IGS(mpcgs,orb); # fi; # if orb<min then # min:=orb; # minrep:=o; # fi; # fi; # od; # fi;
tonew minimal one
no:=ClosureGroup(m,List(nno,i->i^minrep));
ce:=ce*minrep;
matrix:=List([1.((G),g-ExponentsOfRelativePower(PcgsG,g);
od;
if iso<>false then
V:=PreImage(iso,V);
no:=PreImage(iso,no);
ce:=PreImagesRepresentative(iso ; fi;
return [V,no,ce]; endord:[
############################################################################# ## #M ConjugacyClassSubgroups(<G>,<g>) . . . . . . . constructor for pc groups ## This method installs 'CanonicalSubgroupRepresentativePcGroup' as ## CanonicalRepresentativeDeterminator ##
InstallMethod(java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 function(G,U)
local cl;
cl:=Objectify(NewType##
IsConjugacyClassSubgroupsByStabilizerRep),rec());
SetActingDomain(cl,G);
SetRepresentative(InstallMethod(MinimalGeneratingSet,
SetFunctionAction(cl,OnPoints);
SetCanonicalRepresentativeDeterminatorOfExternalSet(cl,
CanonicalSubgroupRepresentativePcGroup);
return cl; end
InstallOtherMethod(RepresentativeActionOp local pcgs matrix,snfgens cti, ,ijava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
[IsPcGroup,IsPcGroup,IsPcGroup,java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 22 function(G,U,V,java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
local c1,c2; if f<>OnPoints or not (IsSubset(G,U) and IsSubsetmatrixii=java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 51
TryNextMethod(); fi; if Size(U)<>Size(V) then
return fail; fi;
c1:=CanonicalSubgroupRepresentativePcGroup
c2:=CanonicalSubgroupRepresentativePcGroup(G,V); if c1[1]<>c2[1] then
return fail; fi;
return c1[3]/c2[3]; end);
############################################################################# ## #F ChiefSeriesUnderAction( <U>, <G> ) ##
InstallMethod############################################################################# "method for a pcgs computable group",
IsIdenticalObj,
function( U, G # Return exponent and probably also an element of high order. If exponent is
local home,e,ser,i,j,k,pcgs,mpcgs,op,m,cs,n;
home:=HomePcgs(G);
e:=# JS: A result of Higman detailed on p564 of C. Sims Computation with
# make the series U-invariant
ser:=ShallowCopy(e);
e:=[G];
n:=G; for# generator with a normed row vector for exponents. # check whether we actually stepped down (or did the intersection # already do it? if Size(ser[i])<Size(n) then if not IsNormal(U,ser[i]) then # assuming the last was normal we intersect the conjugates and get a # new normal with still ea. factor
[i]=(,ser[) # intersect the rest of the series. for j in [i+1..Length(ser)-1] do
ser[j]:=Intersection(ser[i],ser[j]);
od; fi
Addc=java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 32
n:=ser[i]; fi;
java.lang.StringIndexOutOfBoundsException: Range [24, 1) out of bounds for length 37
:G for i in [2..odjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
Info(InfoPcGroup,1,"Step ",java.lang.StringIndexOutOfBoundsException: Range [0, 32) out of bounds for length 12 if IsPrimeInt(Indexei1,e[i])then
Add(ser,e[i]); else
pcgs:=InducedPcgs(home,e[i-1]);
cgshomeei];
op:=LinearActionLayer(U,GeneratorsOfGroup(U),mpcgs); if ForAll(op,IsOne) then
m:=op[1]; # identity
cs:=List([0..Length(m) ldim]=Minimum -,(w+1) else
m:=GModuleByMats(op,GF(RelativeOrderOfPcElement(mpcgs,mpcgs[1])));
cs:=MTX.BasesCompositionSeries(m); fi;
Sort(cs,function(a,b) return Length(a)>Length(b);end);
cs: java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
Info(InfoPcGroup,2,Length( thenreturn [,()]; ; for j in cs do
=java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 35 for k in j do
[class,First(pcgs,g->Order(g)=pclass)]java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
od;
Add(ser,n);
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 fi;
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 48
return ser; end);
InstallMethod(#############################################################################
[IsSolvableGroup], # this is also better for permutation groups, so we increase the value to t,java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 74 # be above the value for `IsPermGroup'.
{} -> Maximum(RankFilter(IsSolvableGroup),
RankFilter(IsPermGroup
IsSolvableGroup
()
return IsInt(Size(G)) and IsPrimeInt(Size(G)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 31 end);
############################################################################# ## #M ViewObj(<G>) ##
InstallMethod(ViewObj:java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 16 function(G)
local nrgens;
nrgens := Length(GeneratorsOfGroup(G)); if (not HasParent(G)) or
nrgens*Length(GeneratorsOfGroup(Parent(G)))
/ GAPInfo.ViewLengthf;
Print("<pc group"); if HasSize(G) then
Print(" of size ",Size(G)); fi;
Print(" with ", Pluralize(nrgens, "generator"), ">"); else
Print("Group(");
ViewObj(GeneratorsOfGroup(G));
Print(")"); fi; end);
############################################################################# ## #M IsSolvableGroup ##
InstallTrueMethod gwhile gp^)) =^;; java.lang.StringIndexOutOfBoundsException: Range [72, 71) out of bounds for length 79
############################################################################# ## #M CanComputeSizeAnySubgroup ##
InstallTrueMethod( CanComputeSizeAnySubgroup, CanEasilyComputePcgs:java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 28
############################################################################# ## #M CanEasilyComputePcgs( <grp> ) . . . . . . . . . subset or factor relation ## ## Since factor groups might be in a different representation, ## they should *not* inherit `CanEasilyComputePcgs' automatically. ## #InstallSubsetMaintenance( CanEasilyComputePcgs, # IsGroup and CanEasilyComputePcgs, IsGroup );
############################################################################# ## #M IsConjugatorIsomorphism( <hom> ) ##
InstallMethod( IsConjugatorIsomorphism, "for a pc group general mapping",
true,
[ IsGroupGeneralMapping ], 1, # There is no filter to test whether source and range of a homomorphism # are pc groups.
this method # higher ranking than the default one in `ghom.gi'. function( hom )
local s, r# Efficiency notes:
s:= Source( hom ); if not IsPcGroup( s ) then
TryNextMethod();
# (2) "SubgroupByPcgs(G,Pcgs(...))" is used to give the returned subgroup
return false; elif IsEndoGeneralMapping( java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return true; fi;
r:= Range( hom );
# if FamilyObj( s ) <> FamilyObj( r ) then
return false; fi;
# Compute a conjugator in the full pc group.
G:= GroupOfPcgs( FamilyPcgsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
genss:= GeneratorsOfGroup( s );
rep:= RepresentativeAction( G, genss, List( genss,
i -> ImagesRepresentative( hom, i ) ), OnTuples );
# Return the result. if rep <> fail then
Assert( 1, ForAll( genss, i -> Image( hom, i ) = i^rep ) );
SetConjugatorOfConjugatorIsomorphism( hom, rep );
return true; else
return false; fi; end );
############################################################################# ## #M IndependentGeneratorsOfAbelianGroup( <A> ) ##
InstallMethod(IndependentGeneratorsOfAbelianGroup# "# Assumed: G is a p-group, e is a positive integer
[IsGroup and CanEasilyComputePcgs and IsAbelian],0, function(G)
local matrix, snf, base, ord, cti, row, g, o, cf#Choose a central element z of order p. Suppose that by induction
if IsTrivial(G) then return []; fi;
matrix:=List([1..Size(Pcgs(G))],g->List(ExponentsOfRelativePower(Pcgs(G),g))); for#that random methods combined with deterministic computations would
matrix[i][i]:=-RelativeOrders(Pcgs(G))[i];
od;
malFormIntMatm18)
base:=[];
ord:=[];
cti:= timerFun : for i in [1(G) returnG;fi
row:=cti[i];
g:=LinearCombinationPcgs(Pcgs,e; if not IsOne(g) then # get the involved prime factors
o:=snf.java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
cf:=Collected(Factors(o)); if(cf>1 java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 for j in cf do
j:=j[1]^j[2];
Add(ord,j);
Add(base,g^(o/j));
od; else
Add(base,g);
Add(rd,; fi; fi;
od;
SortParallel# or waste a lot of time.
return r=imerFunc(; end);
############################################################################# ## #M MinimalGeneratingSet( <A> ) ##
InstallMethod(MinimalGeneratingSet, "ompute via ",
[IsGroup and CanEasilyComputePcgs and IsAbelian], {} -> RankFilter(IsPcGroup), function(G)
local pcgs, matrix, snf, gens, cti, row, g, i;
if IsTrivial (G) then
return []; fi;
pcgs := Pcgs#java.lang.StringIndexOutOfBoundsException: Index 92 out of bounds for length 92
matrix:=List([1..Length for i in [1..Length(pcgs)] do
matrix[]i=RelativeOrders)i];
od;
snf:=NormalFormIntMat(matrix,1+8+16);
gens:=[];
cti:=snf.coltrans^-1; for i in [1..Length(cti)] do
row:=cti[i];
g:=Product( List([1..Length(row)],j->pcgs[j]^row[j])); if not IsOne(g) then
Add(gens,g); fi;
od;
# Return exponent and probably also an element of high order. If exponent is # found to be larger than bound, just return the result found so far. # # JS: A result of Higman detailed on p564 of C. Sims Computation with # F. P. Groups shows that an element of maximal order in a p-group # exists where its weight with respect to a special pcgs is at most # the p-class of the group. Furthermore we need only check normed # row vectors as exponent vectors since every cyclic subgroup has a # generator with a normed row vector for exponents. # # This function just checks all such vectors using a simple backtrack # method. It handles the case of the trivial group and a regular # p-group specially. # # Assumed: G is a p-group, of max size p^30 or so.
BindGlobal("ExponentOfPGroupAndElm", function(G,bound)
local all,pcgs,monic,weights,pclass,p;
monic := function(w,p,f)
: ()java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
M := [0,0];
c := Maximum(w);
w)
a := ListWithIdenticalEntries(Size(w),0);
a[ldim] := 1;
M1 := all(ldim,a,w return ( , )java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 if M1[1] > M if PrimePGroup()=
od;
return M; end; all: (,,wp,,java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
local M,M1; if ldim = Size(a) then return [f(a),PcElementByExponents(pcgs,a)]; fi;
M := [0,0];
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 while a[ldim+1] >= 0do
## if M1[1] > M[1] then M:=M1; if M[1] IsGroupand IsFinite ,java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
a[ldim+1] := a[ldim+1]-1;
od;
return M; end;
p := PrimePGroup(G); if p = fail then return [1,One(G)]; fi; # handle trivial p-group of size 1
pcgs := SpecialPcgs(G);
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
pclass := Maximum(weights); if pclass ##
[IsGroup and IsSol java.lang.StringIndexOutOfBoundsException: Range [57, 55) out of bounds for length 60
return [pclass,First(pcgs, IsomorphismPcGroup) fi;
bound := Minimum(p^(pclass-1),bound);
return monic(LGLayers(pcgs),PrimePGroup############################################################################ end);
InstallMethod( Exponent,"finite solvable group",
true,[IsGroup and IsSolvableGroup and IsFinite],0, function(G) if IsPGroup(G) then
return ExponentOfPGroupAndElm(G,Size(G))[1]; fi;
TryNextMethod(); end);
############################################################################# ## #M AgemoOp( <G> ) ##
( ,""true, , ,, function( G, p, n )
localjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
q := p ^ n; # if <G> is abelian, raise the generators to the q.th power## if IsAbelian(G) then
return SubgroupNC( G,Filtered( List( GeneratorsOfGroup( G ), x ->
x^q ),i->not IsOne(i)) ); fi;
# based on Code by Jack Schmidt
PcgsGjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
ex:=One(G);
alClosure,ubgroupNCGFilteredList(,->i^),><ex))
hom:= SizeG)=100 Size()64then
f:=Range(hom);
ex:=ExponentOfPGroupAndElm(f,q); while ex[1]>q do # take the element of highest order in f and take power of its preimage
ex:=PreImagesRepresentative(hom,ex[2]^q);
sub:=NormalClosure(G,ClosureSubgroupNC(sub,ex));
=(Gsub;
f:=Range(hom);
ex:=ExponentOfPGroupAndElm(f,q);
od;
return subjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# otherwise compute the conjugacy classes of elements
C := Set( ConjugacyClasses(G), x -> Representative(x)^q );
return NormalClosure( G, SubgroupNC( G, C ) ); end );
(,for -,,IsPGroup]0, function(G) if IsTrivial(G) then return G; fi;
return Omega(Center(G),PrimePGroup(G),1); end);
############################################################################# ## #M OmegaOp( <G>, <p>, <n> ) . . . . . . . . . . . . for p-groups ## ## The following method is due to Jack Schmidt ## Omega(G,p,e) is defined to be <g in G: g^(p^e)=1>
# Omega_LowerBound returns a subgroup of Omega(G,p,e) # Assumed: G is a p-group, e is a positive integer
BindGlobal("Omega_LowerBound_RANDOM",100); # number of random elements to test
BindGlobal("Omega_LowerBound",
d:[d1[1](d2-Size((x,]1])1]
local InfoPcGroup,1Subdirect "List(,Size()(x)))
:=unctiong notIsOne^(^) do:=gp od; g;end
H:=Subgroup d=List(,x>(Imagex));
H:=ClosureGroup(H,List( :List(1,]x-ListGeneratorsOfGroupG,
-ImagesRepresentative[](isox]y))) end);
# Omega_Search is a brute force search for Omega. # One can search by coset if Omega(G) = { g in G : g^(p^e) = 1 } # This is the case in regular p groups. # Assumed: G is a p-group, e is a positive integer
(Omega_Search function(G,p,e)
local g,H,fix_order,T;
H:=Omega_LowerBound(G,p,e);
fix_order:=function(g) while not IsOne(g^(p^e Assert1,sBijective); if NilpotencyClassOfGroup(G) < p then T:=RightTransversal(G,H);
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 fi; for in T do
(x>Product-y1^[) if(g in H) then continue; fi;
H:=ClosureSubgroup(H,g); if(H=G) then returnInfo,,(,>1)
od;
return H; end);
# Omega_UpperBoundAbelianQuotient(G,p,e) returns a subgroup K<=G # such that Omega(G,p,e) <= K. Then Omega(K,p,e)=Omega(G,p,e) # allowing other methods to work on a smaller group. # # It is not guaranteed that K is a proper subgroup of G. # # In detail: Omega(G/[G,G],p,e) = K/[G,G] and K is returned. # # Assumed: G is a p-group, e is a positive integer
BindGlobal("Omega_UpperBoundAbelianQuotient", function(G,p,e)
local f;
f:=MaximalAbelianQuotient(G);
IsAbelian(Image(f));
return SubgroupByPcgsod; end);
# Efficiency notes: # # (1) "PreImagesSet" is used to find the preimage of Omega in G/[G,G]. # there may very well be faster ways of doing this. # # (2) "SubgroupByPcgs(G,Pcgs(...))" is used to give the returned subgroup # with natural standard generators. There may be better ways of doing this, # and this may not be needed at all.
# Omega_UpperBoundCentralQuotient(G,p,e) returns # a subgroup K with Omega(G,p,e) <= K <= G. The # algorithm is (moderately) randomized. # # The algorithm is NOT fast. # # In detail a random central element, z, of order p is # selected and K is returned where K/<z> = Omega(G/<z>,p,e). # # Assumed: G is a p-group, e is a positive integer
BindGlobal("Omega_UpperBoundCentralQuotient", function(G,p,e)
local z,f;
z:=One(G); while(IsOne(z)) do z:=Random(Socle(G)); od;
:NaturalHomomorphismByNormalSubgroup,(,z]);
IsAbelian(Image(f)); # Probably is not, but quick to check
return SubgroupByPcgs(G,Pcgs(PreImagesSet(f,Omega(Image(f),p,e)))); end);
# Efficiency Points: # # (1) "Omega" is used to compute Omega(G/<z>,p,e). |G/<z>| = |G|/p. # This is a very tiny reduction AND it is very possible for # Omega(G/<z>)=G/<z> for every nontrivial element z of the socle without # Omega(G)=G. Hence the calculation of Omega(G/<z>) may take a very # long time AND may prove worthless. # # (2) "PreImagesSet" is used to calculate the preimage of Omega(G/<z>) # there may be more efficient methods to do this. I have noticed a very # wide spread of times for the various PreImage functions.
# Omega(G,p,e) is a normal, characteristic, fully invariant subgroup that # behaves nicely under group homomorphisms. In particular # if Omega(G/N)=K/N then Omega(G) <= K. If Omega(G) <= K, # then Omega(G)=Omega(K). # # Hence the general strategy is to find good upper bounds K for # Omega(G), and then compute Omega(K) instead. It is difficult # to tell when one's upper bound is actually equal to Omega(G), # so we attempt to terminate early by finding good lower bounds # H as well. # # Assumed: G is a p-group, e is a positive integer
BindGlobal("Omega_Sims_CENTRAL",100);
BindGlobal("Omega_Sims_RUNTIME",5000);
#Choose a central element z of order p. Suppose that by induction #we know H = Omega(G/<z>). Then Omega(G) is contained in the inverse #image K of H in G. Compute K/K'. If that quotient has elements of #order p^2, then we can cut K down a bit. Thus we may assume that we #know a normal subgroup K of G that contains Omega(G), K maps into #H, and K/K' has exponent p. One would hope that K is small enough #that random methods combined with deterministic computations would #make it possible to compute Omega(K) = Omega(G). #-Charles Sims
BindGlobal("Omega_Sims", function(G,p,e)
local H,K,Knew,fails,r, timerFunc;
K:=G;
H:=Omega_LowerBound(K,p,e); if(H=K) then return K; fi;
# Step 1, reduce until K/K' = Omega(K/K') then Omega(G)=Omega(K) while (true) do# there is a `break' below
Knew:=Omega_UpperBoundAbelianQuotient(K,p,e); if(Knew=K) then break; fi;
K:=Knew;
od;
if (H=K) then
return K; fi;
# Step 2, reduce until we have fail lots of times in a row # or waste a lot of time.
r:=timerFunc();
fails:=0; while(fails<Omega_Sims_CENTRAL and timerFunc()-r<Omega_Sims_RUNTIME) do
Knew:=Omega_UpperBoundCentralQuotient(K,p,e); if(K=Knew) then fails:=fails+1; continue; fi;
fails#### This file is part of GAP, a system for computational discrete algebra.
K:=Knew; ifH=K) H;;
od;
# Step 3: Repeat step 1
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 16
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 62
) break ;
=;
(,, if(H=return;
#
> returnp) java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
# Otherwise we try to search.
(G)<24then returnOmega_SearchG,);fi
# to continue we can try and return a lower bound, but this is too small,1; while i < Length(arg) and join <> fail do
method.You return;'ifwish to \"
java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
return Hjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 end);
(OmegaOp,java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
[ 0, function G,n )
local gens, q, , ord;
# trivial cases
n0java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 43
if IsAbelian( G ) then
gens := ,"; for java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 5
( )
o := GcdInt( [IsPartialPerm, IsPosInt and ],
o < 1
Add 1java.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 48 fie)
od;
returnG,)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
if java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
TryNextMethod();
;
ifPcgsG,-((^))then
returnjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
()215)then
else
return Omega_Sims(pn; fi;i =new; end);
############################################################################ ## #M HallSubgroupOp (<grp>, <pi>) ##
InstallMethodInstallMethod(PartialPermOpNC " object, list, function",
[IsGroup andIsSolvableGroup and IsFinite, IsList], 0, function (grp, pi)
localiso;
iso : IsomorphismPcGroup (rp;
returnjava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 73
)
############################################################################ ## #M HallSubgroupOp (<grp>, <pi>) ##
HallSubgroupOp[]java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
);
############################################################################ ## #M SylowComplementOp (<grp>, <p>) ##
InstallMethod (SylowComplementOp:arg;
[IsGroup and IsSolvableGroup =Maximumjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 function;
local iso;
iso := : (;
returnPreImagesSet (iso, SylowComplement (ImagesSource (iso), p)); end returnDensePartialPermNC(ut;
############################################################################ ## #M SylowComplementOp (<grp>, <p>) ##
RedispatchOnCondition(SylowComplementOp,true,[IsGroup,IsPosInt],
and IsFinite,
IsPosInt ],1 ( )java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
(FittingFreeLiftSetup " , IsPcGroup0
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
local java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 38
pcgs:=java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
return (pcgs:=cgs
depths:=IndicesEANormalSteps(pcgs),
radical:=G,
:G,
factorhom:= "integers andzero must ",
end)
############################################################################# ## #M IsomorphismPermGroup( <G> ) . . . . . . . . . for solvable group ##
InstallMethod( return STRINGIFY("PartialPerm(f,"" "solvableInstallMethod(, "fora partial ",
[ IsGroupand and and CanEasilyComputePcgs ],
local
IsAbelianG # force redispatch on abelian group
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 16
Size)andSize(G)<>64then # for these orders the optimal degree is fast enough
iso:=MinimalFaithfulPermutationRepresentationjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
Info(InfoPcGroupreturn Df,
Size(G),":" );
returnUserPreference" ijava.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 fijava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
djava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 31 if ,j # it can -- find a nice decomposition in two
y;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
abovent:=function(a Append,\[\";
local hom,n;
:=NaturalHomomorphismByNormalSubgroupNC,a);
b:=Image(hom,b);
n:)
=(nx>(,b);
SortBy(n,x->-
(hom,x))java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
;
java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 19 if if Size
d:=[d
,"java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 64
isodxjava.lang.StringIndexOutOfBoundsException: Range [58, 56) out of bounds for length 63
:=(,x->somorphismPermGroupImagex,));
ims:=List([1,2],x->List(GeneratorsOfGroup(G),
y->ImagesRepresentative(d[x],ImagesRepresentative([sPartialPermCollection]coll- (List(coll, ));
ims:=SubdirectDiagonalPerms(IsPartialPermCollection],coll-UnionList(coll MovedPoints);
d:=Group([IsPartialPermColl] > ((oll)java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
(, "forpartial "
s:(, "a permcollection, if IsPartialPermCollection List)java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
ims:=List(imsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
UseIsomorphismRelation(Gd) fi;
iso:=GroupHomomorphismByImagesNC(G,d,GeneratorsOfGroup(G),ims);
Assert(1,IsBijective(iso));
SetIsBijective(iso,true);
return iso; fi;
p:=Collected(Factors(Size(G))); if Length(p)>1then
d:=Combinations(p);
SortBy(d,x->-Product(x,y->y[1]^y[2])); for i in d do
s:=HallSubgroup(G,List(i,x->x[1])); if Size(Core(G,s))=1then
Info(InfoPcGroup,1,"Hall ",List(i,x->x[1]));
# try normalizer quotient
d:=Normalizer(G,s); if Size(Core(G,d))=1then
s:=d; else
d:=ShallowCopy(IntermediateSubgroups(d,s).subgroups);
SortBy(d,x->-Size(x));
a:=First(d,x->Size(Core(G,x))=1); if a<>fail then s:=a;fi; fi;
else # p-group, one minimal: try to go from factor permrep
d:=MinimalNormalSubgroups(G)[1];
ims:=NaturalHomomorphismByNormalSubgroupNC(G,d);
iso:=IsomorphismPermGroup(Image(ims,G));
ims:=ims*iso;
a:=Image(ims,G);
Info(InfoPcGroup,1,"Factor ",List(Orbits(a,MovedPoints(a)),Length));
s:=List(Orbits(a,MovedPoints(a)),x->Stabilizer(a,x[1]));
s:=List(s,x->PreImage(ims,x));
SortBy(s,x->-Size(x)); for j in [1..Length(Factors(Size(s[1])))] do for i in [1..Length(s)] do
p:=LowLayerSubgroups(s[i],j);
p:=Filtered(p,x->not IsSubset(x,d)); if Length(p)>0then
d:=Maximum(List(p,Size));
iso:=FactorCosetAction(G,First(p,x->Size(x)=d));
ims:=[List(GeneratorsOfGroup(G),x->ImagesRepresentative(iso,x)),
List(GeneratorsOfGroup(G),x->ImagesRepresentative(ims,x))];
ims:=SubdirectDiagonalPerms(ims[1],ims[2]);
d:=Group(ims);
UseIsomorphismRelation(G,d);
s:=SmallerDegreePermutationRepresentation(d:cheap); if NrMovedPoints(Range(s))<NrMovedPoints(d) then
ims:=List(ims,x->ImagesRepresentative(s,x));
d:=Image(s);
UseIsomorphismRelation(G,d); fi;
iso:=GroupHomomorphismByImagesNC(G,d,GeneratorsOfGroup(G),ims);
Assert(1,IsBijective(iso));
SetIsBijective(iso,true);
return iso; fi;
od;
od;
Error("should never happen"); fi; end);
Messung V0.5 in Prozent
¤ 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.83Bemerkung:
¤
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.