############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. ## This file's authors include Bettina Eick and Alexander Hulpke. ## ## 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 ##
############################################################################# ## #F CollectedWordSQ( C, u, v ) ## ## The tail of a conjugate i^j (i>j) or a power i^p (i=j) is stored at ## posiition (i^2-i)/2+j ##
(java.lang.StringIndexOutOfBoundsException: Range [38, 38) out of bounds for length 14
local
# convert lists in to word/module pair
IsList)then
v := rec( word java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fi; if IsList(u) then for in [ 1 .(mx = fi;
java.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 0 if[ :Cmodule[ mx[]
return u; fi;
# if <u> is trivial return <v>l =l+; if0 = [l]: l]+1;
return v; fi;
# if <v> has trivial word but a nontrivial tail add tails if =Length(.ord : java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
u mxl1] =C.mone for i if IsBound if Length( p[] then if IsBound( : ]
. if notl1inC. then else
u.tail[i] := ;
; fi;
od;
return u; fi;
# unpack <u> into <x>
x := C.list;
n = Length( c[]: 1 for i in [ 1 .. n ] do
x[od
od;
java.lang.StringIndexOutOfBoundsException: Range [0, 30) out of bounds for length 26
x[u. java.lang.StringIndexOutOfBoundsException: Range [1, 0) out of bounds for length 0
od;
# <mx> contains the tail of <x>
IsBound(]ijava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
# get stacks
w:= C.java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
p fi
c := C.cstackfi
m := C.mstack;
# put <v> onto the stack
wml ;
p[1] := 1;
c[1] := 1;
m1]: java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 11
# run until the stack is empty
:1 while0 < l do
g := w[ [1 ] ;
# apply generator to <mx>
] do if IsBoundfi
# we use the transposed for technical reasons
mx[i] := C.module[g] * fi;
od;
# raise current exponent
c[]: cl+1;
# if exponent is too bigfi; if w[l][p l
end; ############################################################################## if <v> is trivial return <u>
if0 = ;
pl =l]+;
# if position is too big if
;
gthjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
l2 := Length(m[l]); =Length(.)and 0=java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 30
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 if IsBound(xi for in [;
java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 25 fi; elifxg :0 0then fi;
od for [1,3. l1- do
l1l2 then
od if IsBound(java.lang.StringIndexOutOfBoundsException: Range [12, 8) out of bounds for length 28 fi; fi;
od;
[] i in[1 (gs do
# and word
m[l] ;
l : ; fi; fi;
# now move generator to correct position
riin ,-.g ] do if x[i] <> 0then
:l;
w[]: .elators]g;
c
p[l] ; ifjava.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 42 if not l1 in C.avoid then
java.lang.StringIndexOutOfBoundsException: Range [32, 30) out of bounds for length 44
mx[l1] := C.mone + mx[l1]; else
mx # also transversal chosen in complement fi;
m[l] := mx;
mx := [];
l2 := []; if not l1 in r=RightTransversal,m;
l2[l1] := C.mone; fi; for j in [ 2 ..,,OnRight;
l := l+1;
[]: C.relators[][gjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
c[l] := 1;
p[l] := 1;
l]:= l2;
od;
x[i] := 0;
;
od;
# raise exponent
x[g] := x[g] + 1;
# and check for overflow if x[g] = C.orders[g] then
x[g] := 0;
:java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 40
l1 : Crelators[]g] for i in [ 1, 3 .. Length(l1)-1 ] do
x[l1[i]] := l1[i+1];
od; fijava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
l1 := (g^2+g)/2; if not l1 in C.avoid then
Bound(x[1) then
mx[l1] := C.mone + mx[l1]; else
mx[l1] := C.mone; fijava.lang.StringIndexOutOfBoundsException: Range [16, 17) out of bounds for length 16 fi; fi;
od;
# and return result
w:=[; for i in [ 1 .. Length(x) ] do if x[i] <> 0then
Add( w, i );
Add( w, x[i] ); fijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
od;
; end );
############################################################################# ## #F CollectorSQ( G, M, isSplit ) ##
InstallGlobalFunction( CollectorSQ, function( G, M, isSplit )
local , pcgs,o i, word,k NrMovedPoints(ange()<(gi) then
# convert word into gen/exp form
word := function( pcgs, w )
, l, k; if OneOfPcgs( pcgs ) = w then #r[j]*g/r[j^g]); Note j^g=j here as kernel of permrep else
l := ExponentsOfPcElement( pcgs, wfijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
r := [];
k in1. l java.lang.StringIndexOutOfBoundsException: Range [44, 45) out of bounds for length 44 if l[k] <> 0then
Add( r, k );
Add( r, l[k] );
;
od; fi;
return r; endjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
# convert relators into list of lists if IsPcgs( G ) then
pcgs := G; else
pcgs := Pcgs( G ); fi;
r := [];
o := RelativeOrders( pcgs); for i in [ 1 .. Length(pcgs) ] SmallerDegreePermutationRepresentation(gi:cheap);
r[i] := []; for j in [ 1 .. i-1 ] do
r[i][j] := word( pcgs, pcgs[i]^pcgs[j]);
od;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
od;
# create collector for G
Gcoll := rec( );
Gcoll.relators := r;
Gcollorders:=ojava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
# create stacks
Gcoll.wstack = [java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
Gcoll. = [;
Gcoll. : [;
Gcoll.cstack := [];
Gcoll.mstack := [];
# create collector list
Gcoll.list := ;
# in case we are not interested in the module if IsBool fi;
# copy collector and add module generators
r := ShallowCopy(Gcoll);
# create module gens (the transposed is a technical detail)
rmodule:List(.,i->mmutableMatrix(.field,ransposedMat()));
r.mone :=ImmutableMatrix(M.field,(IdentityMat(M.dimension, M.field)));
r.mzero java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# add avoid
r.avoid := []; if isSplit then
k :=Characteristic M.field) for i in [ 1 .. Length(r.orders) ] do for j in [ 1 .. i ] do # we can avoid if s{[+]} # was: r.orders[i] <> k and r.orders[j] <> k then
AddSet( r.avoid, (i^2-i)/2 + j ); fi;
odin :*jjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
; fi;
# and return collector
return r; endjava.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 43
############################################################################# ## #F AddEquationsSQ( eq, t1, t2 ) ##
InstallGlobalFunction
local i, j, l, v, wjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 13
# if <t1> = <t2> return if t1 = t2 then return; fi;
# compute <t1> - <t2>
t1 := ShallowCopy(t1); for i in [ 1 .. Length(t2) ] do if IsBound(t2[i]) then if IsBound(t1[i]) then
t1[i] := t1[i] - t2[i]; else
t1[i] := -t2[i]; fi; fi;
od;
# make lines
l := List( eq.vzero, x -> [] );
v := []; for i in [ 1 .. Length(t1) ] doAddugensi^ij) ifIsBoundt[] for j in [ 1 .. eq.dimension ] do if t1[i][j] <> eq.vzero then
l[j][i] := ShallowCopy(t1[i][j]);
AddCoeffs( l[j][i], v );
od; fi;
od; fi;
od;
# and reduce lines
n := eq.dimension; for java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
x : ]
v := Length(x); if0 < v then w := (v-1)*n + Length(x[)java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 while BindGlobaljava.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 58
c := -Lastbestu,,start,cnt,; for i in eq.spos[w] do if IsBound(x[i]) then
x[i] := ShallowCopy( x[i] );
AddCoeffs( x[i], eq.system[w][i], c );
ShrinkRowVector(x[i]); ifbest:TrivialSubgroup)
Unbind(x[i]); fi; else
x[i] := c * eq.system[w][i]; fi;
v := Length(x); if0 < v then w := (v-1)*n + :;
od; if0 < v then
temw =*(([])java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
.]=( [1 >x)) fi;
[]new2m(z(-1dim+.java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 54 end );
############################################################################# ## #F SolutionSQ( C, eq ) ##
InstallGlobalFunction( SolutionSQ, function( java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
local , , d, # Any killed generators -- use just the same word expression
# construct null vector
n :indGlobal" if r.presentation<>[] for i in [ 1 .. eq.nrels-Length(C.avoid) ] ,tab0evalprod,ensmrep,steps,,
Append( n, eq.vzero );
od;
# generated position
C.unavoidable := [];
j: 1 for i in [ 1 .. eq.nrels ] do if :AssocWordByLetterRep,i];
C.unavoidable[i] := j;
j := j+1;
od;
# blow up vectors
t[java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
:]
ofgensgens{[.mn]}); if IsBound( collect=(new[1g[]1);
: ShallowCopy
ineq. do if not i in C.avoid then
p := eqdimensionod
v{[p+1..p+Length(eq.system[j][i])]} := eq.system[j][i]; fi;
od;
ShrinkRowVector;
t[Length(v)] := v;
AddSet( w, java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 7 fi
od;
v := 0*eq.vzero[1]; for i in w do for java.lang.StringIndexOutOfBoundsException: Range [23, 24) out of bounds for length 23 if j > i then
p := t[j][i];
p<
t[j] := ShallowCopy( t[j] );
AddCoeffst[]ti ;
ShrinkRowVector(t[j]); fi; 2*,1)
;
od;
od;
# compute homogeneous solution
d := Difference( [ 1 .. (eq.nrels-Length( else
v := [];
e : java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 60 for i in d do
x := ShallowCopy(
x[i] := e; for j ord:java.lang.StringIndexOutOfBoundsException: Range [34, 32) out of bounds for length 35
=i
x[ # formal inverse of module element fi;
local l,
Add( v, x );
od; if0 = Length(C.avoid) then
return v; fi;
# construct null vector
n := []; for i in [ 1 .. eq.nrels ] do
Append( n, eq.vzero );
od;
# construct a blow up matrix
i := []; for # mon.) if not j in C.avoid then
Append( i, (j-1)*eq.dimension + [ 1 .. eq.dimension ] ); fijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
od;z:arg[2;
# blowup the vectors
e = ]; for x in v do
d := ShallowCopy(n);
{}: ;
Add( e, d );
od;
# and return
return e; end );
############################################################################# ## #F TwoCocyclesSQ( C, G, M ) ##
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 14
pairs ,,w1 w2 , ;
# get number of generators
java.lang.StringIndexOutOfBoundsException: Range [6, 1) out of bounds for length 9
# collect equations in <eq>java.lang.StringIndexOutOfBoundsException: Index 83 out of bounds for length 83
eq : # issue about overwriting variables that might be needed later
mzero := C.mzero,
dimension := Length( mon=java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 45
:FamilyObj(),d;
spos := [],
system := [] );
# precalculate (ij) for i > j
: ([. ->[ ; for i in [ 2 .. n ] do for j in [ start:=untime)
ReducedForm(frew,UnderlyingElement(x)));
;
od;
# consistency 1: k(ji) = (kj)i
,n-1 . 1 for j in [ n, n-1 .. i+1 ] do
[ -1.+ do
w1 : java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 44 "()^" if w1.word <> w2.word then
( "(i)< )") else
(eq,java.lang.StringIndexOutOfBoundsException: Range [47, 42) out of bounds for length 59
;
od
od;
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
rules
in [n, . 1] for ,- .+1 ]java.lang.StringIndexOutOfBoundsException: Range [39, 40) out of bounds for length 39
]
w1 := CollectedWordSQ( java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
CollectedWordSQ( C, [j,1] java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
#
[i,1] ); if w1.word <> w2.word then
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
AddEquationsSQ( eq, w1.tail, w2.tail ); fi;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
# consistency 3: k (i i^(p-1)) = (ki) i^p-1 for i ,,,killgensfrewfffamfjava.lang.StringIndexOutOfBoundsException: Range [70, 69) out of bounds for length 70
pfi;
:=FactorFreeMonoidByRelations,els)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
w1 := CollectedWordSQ( C, [k,1],
Add(rels,[gens[j]*gens[irses )with corresponding mats
w2 := CollectedWordSQ( C, CollectedWordSQ( C, [k Add,gensj*[i+,i+]j];
[i,p-1] );
local i;
Error( "k i^p <> (ki) i od; else
( java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 55 fi;
od;
od;
# consistency 4: (i i^(p-1)) i = i (i^(p-1) i) i in[1.]do for i in [ n, n-1 .. 1 ] do
p= C.rders[i] if i in then
w1 := CollectedWordSQ( C, CollectedWordSQ( C, [ for jjava.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 39
[i,1] );
2 =CollectedWordSQ(C [,1]java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
CollectedWordSQ( C, [i,p-1], [i,1] ) ); if w1.word <> w2.word then
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 68 else
-+-2; fi;
od;
# and return solution
java.lang.StringIndexOutOfBoundsException: Range [24, 21) out of bounds for length 31 end );
############################################################################# ## #F TwoCoboundariesSQ( C, G, M ) ##
InstallGlobalFunction( TwoCoboundariesSQ, function( java.lang.StringIndexOutOfBoundsException: Range [0, 53) out of bounds for length 9
local n, od;
# start with zero matrix
n := local i,a,w;
R := [];
r := n*(n+1)/2; for i in [ 1 .. n ] do
for iin 1.Length(r.presentationmonrulpos)]do for j in [ 1 .. r ] do
R[i][j] := C.mzero;
od;
od;
a:=Intvi)
M := M.generators;
MI := List( M, = a2then
d := Length(M[1]);
ver for j in [ 1 .. n ] do for i in [ j .. n ] do
x := (i^2-i)/2 + j;
# power relator if i = j then .java.lang.StringIndexOutOfBoundsException: Range [37, 34) out of bounds for length 43
m := C.mone; for e in [ 1 .. C.orders[i] ] do
R[i][x =(ew>(,
od;
# compute fox derivatives
m: Cmone
r := C.relators[i][j]; if r <> 0then
in Length()1,(r)- java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 40 for e in [ 1 .. r[k+1] ] do
R[r[k]][x] := R[r[k]][x] + m;
:= M[rk] *mjava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
ListWithIdenticalEntries(2*dim
od; fi;
od;
od;
make one list
m := [];
r = n*n)/; for i in [ 1 .. n ] do for k in [ 1 .. d ] do
= ]
j [1 . r]do
Append e R[i][][k )
od;
Add( m, e );
od;
od;
# compute a base for <m>
(m)java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 end );
############################################################################# ## #F TwoCohomologySQ( C, G, M ) ##
InstallGlobalFunction, function(C , java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
local cc, cb;
cc := TwoCocyclesSQ i in [1..im]do if Length( cc ) > 0then
cb: ( C,G M )java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 if Length( C.avoid ) > 0then
cb := java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 5 fi; if Length( cb ) > 0then
cc := gens:=GeneratorsOfGroup; fi; fi;
; end );
############################################################################# ## #M TwoCocycles( G, M ) ##
InstallMethod( TwoCocycles, "generic for in [..im]java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
true,
[ temporary build to be able to reduce 0,
function( G, M )
local C
C := CollectorSQ( G, M, false m(One(on),rd;
return TwoCocyclesSQ( C, G, M ); end );
############################################################################# ## #M TwoCoboundaries( G, M ) ##
InstallMethod( TwoCoboundaries, " method for groups"
true,
[ IsPcGroup, IsObject ], 0,
function( G, M )
local;
C := CollectorSQ( G, M, false );
return TwoCoboundariesSQ( C, G, M ); end );
# non-solvable cohomology based on rewriting
############################################################################# ## #M TwoCohomology( G, M ) ##
InstallMethod( TwoCohomology, "generic method for pc groups",
true,
[ IsPcGroup, IsObject ], 0,
function( G, M )
local C, d, z, co, cb;
C := CollectorSQ( G, M, false );
d := Add(Commgens[i]g[])java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
ReduceRules(rws);
z := Flat( List( [1..d], x -> C od;
co : TwoCocyclesSQ( C, G, M );
co := VectorSpace( M.field, co, z );
: TwoCoboundariesSQ( C, G, M );
cb( co, )java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
return fi
module := Mjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
collector := C,
isPcCohomology:=true, local,ijava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
# code for generic 2-cohomology (solvable not required)
InstallMethod( TwoCohomologyGeneric,"generic, using rewriting od;;
[IsGroup and IsFinite,IsObject],0, function od;
local field,fp,fpg,gens,hom,mats,fm,mon,tzrules,dim,rules, gensmrep:ListGeneratorsOfGroupfp=/relsjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
len1 ->LetterRepAssocWord(nderlyingElementImagesRepresentativemonhomjava.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
simi:=fail;
c,nvars,htpos,zeroq,r,ogens,bds,model,q,pre,pcgs,miso,ker,solvec,rulpos,
# module gjava.lang.StringIndexOutOfBoundsException: Range [21, 22) out of bounds for length 21
# collect the word in factor group
colltz=()
local i,p;
# collect from left:=(gensmrep,-]z);
i:=1; while i<=Length(a) do
# does a rule apply at position i?
=RuleAtPosKBDAGdag,i
a:=Concatenation(a{[1..i-1]},tzrules[p][2],
a{i+([1)..Length(a)]});
i:=Maximum(0,i-mal); # earliest which could be affected fi;
i:=i+1;
od;
return a; end
# matrix corresponding to monoid word
mapped:=function(list)
local a,i;
a:=onematnew=roupHomomorphismByImages(p,GeneratorsOfGroup(fp),
i listdo if i in nonone then
mats[i]; fi;
od java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
return a; end;
# normalform word and collect the tails
collectail:= :MappedWordr..killrelators[,ogens,ens{1#sim:=IsomorphismSimplifiedFpGroup(fp);
local v,tail,i,p;
=List(ules);
# collect from left
i:=1; whilejava.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0
# does a rule apply at position i?
p:=RuleAtPosKBDAG(dag,wrd,i);
if () rulpos[]>fail then
p:=rulpos[p];
tail forini.Length(ens]
wrd:=Concatenation(wrd{[1..i-1 (gi[j) if p in ; if IsIdenticalObj(v[p],zero) then
v[p]:=mapped(tail); else
p:p+appedjava.lang.StringIndexOutOfBoundsException: Range [36, 34) out of bounds for length 36
;
;
i:=Maximum(0,i-mal); # earliest which could be affected
;
i:=i+1;
od;
return [wrd,v];:Maximum(1000,*(pS(p,); end;
field:=mo.field;
simi:=fail;
# if false then # # old general KB code, left for debugging # fp:=IsomorphismFpGroup(G); # fpg:=Range(fp); # fm:=IsomorphismFpMonoid(fpg); # mon:=Range(fm); # # if IsBound(mon!.confl) then # tzrules:=mon!.confl; # else # kb:=KnuthBendixRewritingSystem(mon); # MakeConfluent(kb); # tzrules:=kb!.tzrules; # mon!.confl:=tzrules; # fi; # else
# new approach with RWS from chief series
mon=)
fp:=mon.fphom;
fpg:=Range(fp);
fm:=mon
tzrules:=List(RelationsOfFpMonoid(mon),x->List(x,java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 40 # fi;
dag:=EmptyKBDAG(Union(List(GeneratorsOfMonoid(FreeMonoidOfFpMonoid(mon)),
LetterRepAssocWord)));
mal:=Maximum(List(tzrules,x->Length(x[1] sim=IsomorphismSimplifiedFpGroup() for i in =)
AddRuleKBDAG(dag,tzrules[i][1],i);
od;
gensjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
x>PreImagesRepresentative,x);
hom:=GroupHomomorphismByImagesNC(G,Group(mo.generators),
GeneratorsOfGroup(G
(gensx-ImagesRepresentativehom),.field # new gens
l1:=GeneratorsOfGroup(fpg);
l1:=Concatenation(l1,List(l1,Inverse));
formalinverse:=[]; for i in l1 do
AssocWord(nderlyingElementImagesRepresentativefm,));
o:=LetterRepAssocWord(UnderlyingElement(ImagesRepresentative( ListWithIdenticalEntries.odule.dimension,()); if Length(j)<>1 or Length(o)<m:=p;
formalinverse[j[1]]:=o[1];
od;
# rules that describe formal inverses, or delete generators of order 2 get no
:=FilteredDerivedSeriesOfGroup()
hastail:=[];
rules:=[];
genkill:=];# relations that kill generators. Needed for presenation.# roughly 5 for 1000, 30 for 10^6, 170 for 10^9 for r in # allow to enfo test coverage if Length(r[1])>=2then
Add(,r) if Length(r[1])>2 or
(Length(r[1])=2 and (Length(r[2])>0 or formalinverse[r[1][1]]<>r[1][2])) then
; fi; else
generator is not used
m:=First(RelationsOfFpMonoid(mon),x->List(x,LetterRepAssocWord)=r);
m:=List(m,x->PreImagesRepresentative(fm,ElementOfFpMonoid(FamilyObj(One(mon)),x)));
:List(nderlyingElement) # free group elements/words
if not IsOne(m[1]*Subword(m[2],1,1)) then
akea generatorredundant (byexpressing it the # other gens)? If so, remember relation as needed to kill this generator, butifit=fail then # no influence on Cohomology calculation (which just uses the rest)
m1 in GeneratorsOfGroup(FreeGroupOfFpGroupF()! then Add(genkill,r); fi; fi; fi;
od;
rulpos:=List :pjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
htpos:=List([1..Length# avoid working hard for outer automorphisms
model:=ValueOption("model e:=ilteredDerivedSeriesOfGroupm, if model<>fail then
q:=GQuotients(model,G)[1];
pre:=List(gens,x->PreImagesRepresentative(java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 42
ker:=KernelOfMultiplicativeGeneralMapping(q);
m:Laste)
l1:=GModuleByMats(LinearActionLayer(java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 28
MTXIsIrreducible)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
miso:=MTX.Isomorphismfi
,x));
pcgs:=PcgsByPcSequence(FamilyObj(One(model)),new);
vector
solvec:=[];
one:=Onefalse<.field
m:=GroupGeneralMappingByImagesNC(fpg,model,GeneratorsOfGroup( m,
mats:=List(GeneratorsOfMonoid(mon)x>java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 70
x->ImagesRepresentative(m,
PreImagesRepresentative(fm,x))); #Elements for monoid generators
nonone:= (,, I()java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
pre:=mats;
onemat:=One(G); for
r ((p))java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
m:=LeftQuotient;
m: 50
solvec:Concatenationsolvec,*ne();
od; fi;
onemat:=One(mo.generators[1]);
zerovec:=java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
mats:= wasbold=
x>magesRepresentative,(fp,
PreImagesRepresentative(fm,x)))); # matrices for monoid generators
one:=One(mats[1
->notIsOne(mats[]);
zero:=zerovec;
dim:=Length(zero # Rewriting produces a bad presentation. Rather rebuild a new
nvars:=dim*Length(hastailjava.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
#rk:=0;
es(nvars,()java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
eqs:=MutableBasisx>(FamilyObjOne(ps),)
olen: = (,,hom is)fijava.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68 for :=List(x-ImagesRepresentative,)
trule ,i," BasisVectors(eqs), equations)java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80 50
len1:=Length(l1); forj [.Length() do
l2:=rules[j][1];
m: for o in [1..m-1] do# possible overlap Length
start:=len1-o; if ForAll([1..o],k->l1[start+k]=l2[k]) then
# apply l2 first
new:=Concatenation(l1{[1..len1-o]},rules[j][2]);
:(sub) if<v2[]java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0 #else Print("Both reduce to ",c,"\n"); fi;
v2[]; if j in hastail then
v2[j]:=v2[j]+one; fiInfo,ei=(fx) if v1<>v2 then# If entries stay zero they are identical (and thus test cheaply):(wrdx>(uot,));
=(1.dim]xzeroq)java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
kindo if v1[k]<>v2[k] then
new:=TransposedMat(v1[k]-v2[k]);
r:java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 45 for l in [1. (xImagesRepresentative,):) if not IsZero(new[l]) then
]r:n[]java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36 fi;
odjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fi;
for k in c do
if ListWithIdenticalEntriesr.odule.dimension
Error("model does not fit IdentityMat(mr..ield)) fi; #AddSet(eqs,ImmutableVector(field,k));
k:(eqs,(field,); #Add(alleeqs,ImmutableVector(field,k));
k od; if java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
CloseMutableBasisAdd(,i^ eiListfunction(java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
od; fi;
fi;
od;
od;
Add(olen,Length(BasisVectorsjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0 if Length(olen)>3 and # if twice stayed the same after increase
olen[Length(olen)]=olen[Length(olen)-2] and
olen[Length(olen)]<>olen[Length(olen)-3] then
k:=List(BasisVectors(eqs),ShallowCopy);;
TriangulizeMat(k);
eqs:=MutableBasis(field,
(,ImmutableVector(,)zeroqjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 fi;
od;
eqs:=ShallowCopy(BasisVectors(eqs)); if Length(eqs)=0then
eqs:=IdentityMat( ()((,))java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80 else
eqs:=ImmutableMatrix( GeneratorsOfGroup),(mgens
eqs:=NullspaceMat(TransposedMat(eqs)); # basis of cocyclesod fi;
# Now get Coboundaries
#
findtail:=function(wrd,nums,vecs)
local a,i,j,p,v;
a:=zerovec; for :LargerQuotientBySubgroupAbelianization,c;
p:=Position(nums,wrd[i]); if p<>fail then
v:=vecs[p]; for j in [i+1..Length(wrd)] do
v:=v*mats[wrd[j]];
od;
a:=a+v; fi;
od;
return :L() end;
bds:=[]; for i in [1..Length(mats)] do if formalinverse[i LinearCombinationPcgs({+.nn],java.lang.StringIndexOutOfBoundsException: Range [73, 72) out of bounds for length 78
c:=[i, :newfree;# new extension for k in one do
[,-matsformalinversei];
new:=[]; for in do
v1:=findtail(rules[j][1],c,r);
v2:=findtail(rules[j][2] >(e,)noassert);
Appendnew,1-
od;
new:=ImmutableVector(field,new);
Assert(0,(Length(eqs)>0 and SolutionMat(eqs,new)<>fail) or IsZero(new));
Add(bds,new);
od; fi;
od;
bds:=Filtered(TriangulizedMat(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
bds:Listb,Immutable;
if gens<>GeneratorsOfGroup(G) then
G:=GroupWithGenerators(java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 fijava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
r:=rec(group:=G,module (e.quot)))java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
new: e:=efiningQuotientHomomorphism
r.cohomology:=new;
new:=[];
one:=One(FreeGroupOfFpGroup(fpg));
=G(mon,
x->UnderlyingElement(PreImagesRepresentative(fm,x))); # matrix corresponding to monoid word
mapped2()
local a,i;
a:=one;
java.lang.StringIndexOutOfBoundsException: Range [27, 20) out of bounds for length 20
:=*[]
od;
return a; end;
# rule that would get the tail
Add(new,LeftQuotient(mapped2(rules =(,
od;
r.presentation:=rec(group (i,ab; # relators to kill superfluous generators
killrelators: ; # position of relators with tails in tzrules
monrulpos:=java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
prewords:=List(ogens,x->UnderlyingElement(ImagesRepresentative(fp,x))));
# normalform word and collect the tails
r.tailforword
local v,i,j,p,w,tail;
v:=zerovec;
# collect from left
i=; while i<=Length(wrd) do
# does a rule apply at position i?
:RuleAtPosKBDAG(ag,rdi)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
if IsInt(p) and rulpos[p]<>fail then
p:=rulpos[p];
tail:=wrd{[i+Length(rules[p][1])..Length(wrd)]};
wrd=oncatenationwrd{1.-],rules[]]tail;
if p in hastail then
=java.lang.StringIndexOutOfBoundsException: Range [62, 55) out of bounds for length 65 for j in tail do
w:=w*mats[j];
od;
v:=v+w; fi;
i:=Maximum(0,i-mal); # earliest which could be affected fi;
i:=i+1 (2" version"
od;
end;
r.fphom:=fp;
r.monhom:=fm;
r.colltz:=colltz;
# inverses of generators
o:=eneratorsOfGrouppresentation.)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
return [colltz(formalinverse{Reversed(wrd)}),
-r.tailforword(Concatenation(wrd,colltz(formalinverse{Reversed(wrd)})),zy)
[2]]; end;
r.pairact:=function(zy,pair)
local autom,mat,i, SortBy(ei>x) # long ones first
autom:=InverseGeneralMapping(pair[1]);
# cache words for images of monoid generators
)thenjava.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 75
imagemonwords=.magemonwordsjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
(nr)
local a; if not IsBound(imagemonwords[nr]) # generators that get killed. Do not use in RHS # apply automorphism
presentativefm,java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 46
a=java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 41
a=ImagesRepresentativea)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
a:ImagesRepresentativea)
a:=ImagesRepresentative(fm,a);
a:=LetterRepAssocWord(UnderlyingElement(a));
a:=colltz(a);
imagemonwords[nr]:=a; fi;
returnimagemonwords[nr] end;
# normalform word and collect the tails
collectail:=function(wrd)
local v,,,tailjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
v:=zerovec;
# collect from left
i:1 while i<=Length(wrd) do
# does a rule apply at position i?[ensi+*i,());
p:=RuleAtPosKBDAG(dag,wrd,i);
p:=rulpos[p];
tail:=wrd{[i+Length(rules[p][1])..Length(wrd)]};
wrd:=Concatenation(wrd{[1..java.lang.StringIndexOutOfBoundsException: Range [0, 38) out of bounds for length 21
if p in hastail then
w:=zy{dim*(htpos[p]-1)+[1..dim]}; for j j:=QuoInt(prime
w:=w*mats[ Add(,gens[],gens[java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
;
v: fi;
i:=Maximum(0,i-mal); # earliest which could be affected
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 11
i:= java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
od;
return [wrd, end;
prdout:=function(l)
local w,v,j;
w:]java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
v:=zerovec; for j in l do
v:=v*mapped eEpimorphismPGroup()prime,ClassPGroupm)1;
w:=collectail(Concatenation(w,j[1]));
v:=v+ e=*;# map onto pgroup
w:=w[1];
(,gens[]gens[]i]melmvec(ew)];
return [w,v]; end;
mat:=pair[2];
new:=[];
# inverses of generators
myinvers:wrdcolltz(ormalinverseReversed())java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
-collectail(Concatenation(wrd,colltz(formalinverse{Reversed(wrd)})))[2]];
# images of generators
extim[]=[]melmvec({(*+..dim])java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
# collect inverses and interleave generators/inverses
extim:=Concatenation(List(extim,x->[[x,zerovec],myinvers(x)]));
for i in [1..Length(hastail)] do # evaluate rules in images
left:=prdout(extim{rules[hastail[i]][1]});
# invert left
v:=myinvers(left[1]);
left:=[v[1],v[2]-left[2]/mapped(left[1])];
right=prdout(extim[astail[][]);
# quotient left^-1*right
; if java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 9
Append(,left[]mat)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
od;
# debugging code: Construct group and work there # new2:=[]; # ext:=FpGroupCocycle(r,zy,true); # hom:=IsomorphismPermGroup(ext); # ext:=Image(hom); # epcgs:=PcgsByPcSequence(FamilyObj(One(ext)), # GeneratorsOfGroup(ext){[Length(mats)/2+1..Length(GeneratorsOfGroup(ext))]}); # # exta:=Concatenation(List([1..Length(mats)/2],x->[ext.(x),ext.(x)^-1])); # exte:=exta; # # myprd:=function(wrd) # local i,w; # w:=One(ext); # for i in wrd do # w:=w*exte[i]; # od; # return w; # end; # # v:=List([1..Length(mats)/2],x->myprd(imgwrd(2*x-1))); # new generators # v:=Concatenation(List([1..Length(mats)/2],x->[v[x],v[x]^-1])); # exte:=v; # # for i in [1..Length(hastail)] do # left:=rules[hastail[i]][1]; # right:=rules[hastail[i]][2]; # left:=myprd(left)^-1*myprd(right); # v:=-ExponentsOfPcElement(epcgs,left)*One(mo.field); # # Append(new2,v*mat); # od; # if new2<>new then Error("wrong ",pair);fi; # if IsOne(pair[1]) and IsOne(pair[2]) then # if new<>zy then Error("one");else Print("onegood\n");fi; # fi;
return ImmutableVector(mo.fieldAddrels,gens[+]gens[])java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 end;
return r; end);
BindGlobal( " # temporary build to be able to reduce
local e,onef);
e:=[];
one:One(mats java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 24 for m in mats do
CharacteristicPolynomial(m)));
a:=List(r,x->NullspaceMat(m-x*one));
Se(fpnew)
Add(e,a);
od; for c in Cartesian(e) fi;
is:=c[1];
Add(els[ens[]new*];
is=SumIntersectionMat,[i][];
od; if Length(is)>0then
return is;
:KnuthBendixRewritingSystemFOne(),:sconfluentfi;
odReduceRules;
return false; end );
BindGlobal("WreathElm",function(b,l,m)
localend);
n:=Length(l);
ran:=[1..b];
r:=0;
d:ImmutableVectorrmodule.,
p:=[]; # base bit for i in [1..n] do
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
p[r+j]:=r+j^l[i];
od;
Add(d,ran+r);
r:=r+b;
od; # permuter bit
p=ermListp)PermList(((,)
return p; end);
"function(,java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
local hom,mats,m,i,j,mo,bas, ::=List(GeneratorsOfGroup)g-ist(c, if not MTX.java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
pAdd :Orbits().fieldLengthcohomology)java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 if not IsPrime(p) :=FreeGroupstr;
k=(odule.generators
hom=(GG(odule.enerators,
GeneratorsOfGroup(G),module.generators); # we allow do go immediately to normal subgroup of index up to 4. # This reduces search space.elators]do
:DescSubgroupIteratorG:skip=LogInt(#java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77 ##
m:=NextIterator(it);#M Extensions( G, M )
if Index(G,m)*p>p^module.dimension then
Info(InfoExtReps,2,"Index reached ",Index(G,m), ", write out module action"); # alternative, boring version
mo:=AbelianGroup(ListWithIdenticalEntries(module.java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 13
bas:=Pcgs(mo);
act:=List(module.java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 10
coh:=TwoCohomologyGeneric)
Listm->PcElementByExponents):) return lementsVectorSpacecohmoduleicohomologyoh.ero)java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 78
(ForAllct,sBijective);
a:=Group(act);
SetIsGroupOfAutomorphismsFiniteGroup(a,true);
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0
r:=rec(group:=gi,
:List(),x-
ImagesRepresentative, for j in .im
agesRepresentative(i -(Group IsFinite
basis:=List(bas,x->java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 15
Assert(0,Size(gi)=Size(G)*p^module.dimension);
;
elif Size(Core(G,m))>1then
Info fpSizerg)prime^.java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 5 else
Info(InfoExtReps,2,"Trying index wasbold:false;
mats:=List < then
x :(fpmon)
:MatricesStabilizerOneDim.fieldmats); iffi; # quotient module # basis: supplemental vector and submodule basis
bas:=BaseSteinitzVectors( if IsZero(z) and MTX.IsIrreducible(r.mod
NullspaceMat(TransposedMat(a{[1]})));
bas:=Concatenation(bas.factorspace:mg;
# assume we have a generating set for the SDP consisting of the
new:GroupHomomorphismByImages,,eneratorsOfGroup)
:CyclicGroup(sPermGroup
ugens:=[];
# also transversal chosen in complement
r:=RightTransversal(G,m);
act=#sim:IsomorphismSimplifiedFpGroup)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
act:=List(GeneratorsOfGroup:=(sim,) #l:=ListWithIdenticalEntries(Index(G,m),()); for gi in [1..k] do
l:= quot=nverseGeneralMapping(im) for j in [1..Length(r)] do
#matrix forSchreier gen
a:=ImagesRepresentative(hom,
r[]*(gi)r[ositionCanonicalrj*.gi))java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
a:=Int(SolutionMat(bas, GeneratorsOfGroup(r.group),r.mjava.lang.StringIndexOutOfBoundsException: Range [55, 54) out of bounds for length 56 # write down permutation that acts as mult by a if IsZero(a) then
lj:() elsetrysy=aximum(,50*(,SylowSubgroup(prime)
l[j]:#java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 fi;
od;
Add(ugens,WreathElm(p,l,act[gi])
od;
# module generator for j in [1..Length(r)] do #r[j]*g/r[j^g]); Note j^g=j here as kernel of permrep
l[j]:=
cy^Int(SolutionMat(bas,bas[1]/ImagesRepresentative( (quot);
od;
p.java.lang.StringIndexOutOfBoundsException: Range [31, 22) out of bounds for length 31
:java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
Assert(0,Size(gi)=p^module # avoid working hard for outer automorphisms if ValueOption("cheap")<>true then
a:=SmallerDegreePermutationRepresentation(gi:java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
ange(a)<rMovedPoints
gi:=Image(a,gi);
ugens:=List(ugens,xifsimif
fi;
r:=rec(group:=gi,ggens:=ugens{[1..k] wasbold
# compute basis
bas:=bas{[1]};
:ugens{1.k];
ugens:=ugens{[k+1]};
i: and (p)2Size() while Length(bas)<module.dimension do for j in [1..k] do
a:=bas[i]*module.generators[j]; if SolutionMat(bas,a)=fail then
Add(bas,a);
Add(,gens[j) fi;
od;
:i+
od; # convert back to standard basis
r.basis:=List(Inverse(bas),x->LinearCombinationPcgs(ugens,x));
return r; fi; fi;
until false; end);
BindGlobal("RandomSubgroupNotIncluding",function(g,n, wasbold:true;
local best,u,v,start,cnt,java.lang.StringIndexOutOfBoundsException: Range [0, 32) out of bounds for length 13
runtime:=GET_TIMER_FROM_ReproducibleBehaviour();
start:=runtime();
best:=TrivialSubgroup(g);
cnt:=0; while runtime()-start<time or cnt<100do
cnt:=cnt+1;
u:=TrivialSubgroup(g);
repeat
v:=u;
u:=ClosureGroup(u,Random(g));
until IsSubset(u,n); if IndexNC(g,v)<IndexNC(g,best) then best:=v;fi;
od;
return best; end);
InstallGlobalFunction(FpGroupCocycle,function(arg)
local r,z,ogens,n,gens,str,dim,i,j,f,rels,new,quot,g,p,collect,m,e,fp,sim,
it,hom,trysy,prime,mindeg,fps,ei,mgens,mwrd,nn,newfree,mfpi,mmats,sub,
tab,tab0,evalprod,gensmrep,invsmrep,zerob,step,simi,simiq,wasbold,
mon,ord,mn,melmvec,killgens,frew,fffam,ofgens,rws,formalinverse;
# function to evaluate product (as integer list) in gens (and their # inverses invs) with corresponding action mats
evalprod:=function(w,gens,invs,mats)
local new,i;
new:=[[],zerob]; for i in w do if i>0then
collect:=r.tailforword(Concatenation(new[1],gens[i][1]),z);
new:=[collect[1],collect[2]+new[2]*mats[i]+gens[i][2]];
collect:=r.tailforword( ;
new:=[ )java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 fi;
od;
#M Extensions( G, M ; end;
melmvec:=function(v)
trueIand IsObjectjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 41
w:=One(f); for i in [1..Length(v)] do
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 if prime=coh:TwoCohomologyGeneric simi=failhen
wElementsjava.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 78 else
a:=prime-a;
w:=w*gens[2*i+mn]^a; fi;
od;
return w; end;
# formal inverse of module element
formalinverse:=function(w)
local l,i;
l:[];
:simiDefiningQuotientHomomorphism
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 10
Add,i)fi;
;
bj(w,) end;
r:=rg]
z:=arg[2];
ogens ->pGroupCocyclecoh,:uot)java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
dim:=r.module.dimension;
prime:=Size(r.modulefield;
if ;
mon:=fail; else # Construct the monoid and rewriting system, as this is cheap to do butjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 # will allow for reduced multiplication. Do so before the group, so there is no # issue about overwriting variables that might be needed later
mon:=Image(r.monhom);
ofgens:=FreeGeneratorsOfFpMonoid(mon);
fffam:=FamilyObj(One(FreeMonoidOfFpMonoid(mon)));
:(mon; # generators that get killed. Do not use in RHS
killgens:=Filtered(GeneratorsOfMonoid(mon),x-> ei,-Lengthx)
ReducedForm(U(x))
killgens:=Union(List(killgens,x->LetterRepAssocWord( :1;
)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 20 for i in [1..dim] do
Add(str,Concatenation("m",java.lang.StringIndexOutOfBoundsException: Range [0, 38) out of bounds for length 31
Add(str,Concatenation("m",String(i),"^-1"));
od;
f:=FreeMonoid(str);
gens:=GeneratorsOfMonoid(f);
# module is elementary abelian for i in [mn+1,mn+3.. >java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 56 if prime=2then
r,g[i2O(f)
([1,]; else 2Djava.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 64
Add(rels,[gens[i]^j,gensjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Add(rels,[gens[i+1]^j,gens[i]^(j- Stabilizernn1; fifi;
[i.(str) java.lang.StringIndexOutOfBoundsException: Range [36, 37) out of bounds for length 36
Add(rels,[gens[j]*gens[i],gens[i]*gens[j]]);
Add(rels,[gens[j]*gens[i+1] :S(pp;
od;
od;
# module rules
[.]java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 if not i in killgens then for =(e,;
new:=r.module.generators[QuoInt(i# ()java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52 if IsEvenInt(i) then new:=new^-1; fi;
=(-+12] if IsEvenInt(j) then new:=-new;fi;
Add(rels,[gens[j]*gens[i],gens[i]*melmvec :pjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
od;
i;
od;
# rules with tails for i in [1..Length(r.presentation.monrulpos)] do
new:=RelationsOfFpMonoid(mon)[r.presentation.java.lang.StringIndexOutOfBoundsException: Range [0, 60) out of bounds for length 55
new:=List(new,x->MappedWord(x,java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 21
new[(java.lang.StringIndexOutOfBoundsException: Range [33, 30) out of bounds for length 69
Add(rels,new);
od;
same if r.presentation.killrelators< (n);
FilteredIsOddInt do
new:=AssocWordByLetterRep(java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 36
new:=[new,ReducedForm(frew,new)];
new:=List( if HasIsSolvableGroupr.)then
,[1.java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 33
Add(rels,new);
RemoveSet(killgens,i);
od; fi;
if HasReducedConfluentRewritingSystem(mon) then
ord:=OrderingOfRewritingSystem(ReducedConfluentRewritingSystem(mon)); if HasLevelsOfGenerators(ord) then
ord:=WreathProductOrdering(f,
LevelsOfGenerators()+
ListWithIdenticalEntries(2*dim,1))); else
:f,
Concatenation(ListWithIdenticalEntries(mn,2):=cohjava.lang.StringIndexOutOfBoundsException: Range [33, 31) out of bounds for length 49
ListWithIdenticalEntries(2*dim,1))); fi;
Groupm)coh.);
ord: :(xx1.;
Concatenation(ListWithIdenticalEntries(mn,2),
ListWithIdenticalEntries(2*dim,1))); fi;
# if there is any [x^2,1] relation, this means the inverse needs to be # mapped to the generator. (This will have been skipped in the # monrulpos.) for i in rels do if Length(i[2])=0 and Length Elements(module,coh)java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
and Length(Set(LetterRepAssocWord(i[1I" java.lang.StringIndexOutOfBoundsException: Range [60, 59) out of bounds for length 79
newRankFilter(java.lang.StringIndexOutOfBoundsException: Range [36, 27) out of bounds for length 38
IsOddIntnew
Add(rels,[gens[coh:=TwoCohomologyGenericM; fi; fi;
od;
# temporary build to be able to reduce
mon:=FactorFreeMonoidByRelations(f,rels);
rws:=KnuthBendixRewritingSystem(FamilyObj(One(mon)),ord);
# handle inverses that get killed for i in killgens do
new:=AssocWordByLetterRep(fffam,[i]);
new:=ReducedForm(frew,new); # what is it in the factor?
new:=MappedWord(new,ofgens,gens{[1..mn]}); # now left multiply with non-inverse generator
j:=ReducedForm(rws,gens[i-1]*new); #must be a tail.
j:=ReducedForm(rws,formalinverse(j)); # invert
Add(rels,[gens[i],new*j]);
od;
mon:=FactorFreeMonoidByRelations(f,rels);
rws:=KnuthBendixRewritingSystem(FamilyObj(One(mon)),ord:isconfluent);
ReduceRules(rws);
MakeConfluent(rws); # will add rules to kill inverses, if needed
SetReducedConfluentRewritingSystem(mon,rws); fi;
# now construct the group
str:=List(ogens,String);
zerob:=ImmutableVector(r.module.field,
ListWithIdenticalEntries(dim,Zero(r.module.field)));
n:=Length(ogens);
for i in [1..dim] do
Add(str,Concatenation("m",String(i)));
od;
f:=FreeGroup(str);
gens:=GeneratorsOfGroup(f);
rels:=[]; for i in [1..Length(r.presentation.relators)] do
new:=MappedWord(r.presentation.relators[i],ogens,gens{[1..n]}); for j in [1..dim] do
new:=new*gens[n+j]^Int(z[(i-1)*dim+j]);
od;
Add(rels,new);
od; for i in [1..Length(r.presentation.killrelators)] do
new:=MappedWord(r.presentation.killrelators[i],ogens,gens{[1..n]});
Add(rels,new);
od;
for i in [n+1..Length(gens)] do
Add(rels,gens[i]^prime); for j in [i+1..Length(gens)] do
Add(rels,Comm(gens[i],gens[j]));
od;
od; for i in [1..n] do for j in [1..dim] do
Add(rels,gens[n+j]^gens[i]/
LinearCombinationPcgs(gens{[n+1..Length(gens)]},r.module.generators[i][j]));
od;
od;
fp:=f/rels;
SetSize(fp,Size(r.group)*prime^r.module.dimension);
simi:=fail;
wasbold:=false;
if mon<>fail then
rels:=MakeFpGroupToMonoidHomType1(fp,mon);
SetReducedMultiplication(fp); fi;
if Length(arg)>2 and arg[3]=true then if IsZero(z) and MTX.IsIrreducible(r.module) then # make SDP directly
m:=PermrepSemidirectModule(r.group,r.module:cheap);
p:=m.group; # test is cheap here, thus no NC
new:=GroupHomomorphismByImages(fp,p,GeneratorsOfGroup(fp),
Concatenation(m.ggens,m.basis)); else
g:=r.group;
quot:=InverseGeneralMapping(sim)
*GroupHomomorphismByImages(fp,g,GeneratorsOfGroup(fp),
Concatenation(GeneratorsOfGroup(g),
ListWithIdenticalEntries(r.module.dimension,One(g))));
hom:=GroupHomomorphismByImages(r.group,Group(r.module.generators),
GeneratorsOfGroup(r.group),r.module.generators);
p:=Image(quot);
trysy:=Maximum(1000,50*IndexNC(p,SylowSubgroup(p,prime))); # allow to enforce test coverage if ValueOption("forcetest")=true then trysy:=2;fi;
mindeg:=2; if IsPermGroup(p) then
mindeg:=Minimum(List(Orbits(p,MovedPoints(p)),Length)); fi;
it:=fail; while Size(p)<Size(fp) do # we allow do go immediately to normal subgroup of index up to 4. # This reduces search space
repeat if it=fail then # re-use the first quotient, helps with repeated subgroups iterator if p=r.group then
m:=r.group; else
m:=p; fi; # avoid working hard for outer automorphisms
e:=Filtered(DerivedSeriesOfGroup(m), # roughly 5 for 1000, 30 for 10^6, 170 for 10^9
x->IndexNC(m,x)^4<=Size(m));
m:=Last(e);
it:=DescSubgroupIterator(m:skip:=LogInt(Size(p),2)); fi;
wasbold:=false;
m:=NextIterator(it); # catch case of large permdegree, try naive first if Index(p,m)=1 and IsPermGroup(p)
and NrMovedPoints(p)^2>Size(p) then # take set stabilizer of orbit points.
e:=Set(List(Orbits(p,MovedPoints(p)),x->x[1]));
m:=Stabilizer(p,e,OnSets); if IndexNC(p,m)>10*NrMovedPoints(p) then
m:=Intersection(MaximalSubgroupClassReps(p)); fi; if IndexNC(p,m)>10*NrMovedPoints(p) then
m:=p; # after all..
wasbold:=false; else
wasbold:=true; fi; fi;
Info(InfoExtReps,3,"Found index ",Index(p,m));
e:=fail; if Index(p,m)>=mindeg and (hom=false or Size(m)=1 or
false<>MatricesStabilizerOneDim(r.module.field,
List(GeneratorsOfGroup(m),
x->TransposedMat(ImagesRepresentative(hom,x))^-1))) then
Info(InfoExtReps,2,"Attempt index ",Index(p,m)); if hom=false then Info(InfoExtReps,2,"hom is false");fi;
if hom<>false and Index(p,m)> # up to index 50 # the rewriting seems to be sufficiently spiffy that we don't # need to worry about this more involved process.
# this might fail if generators are killed by rewriting
and Length(r.presentation.killrelators)=0 then
# Rewriting produces a bad presentation. Rather rebuild a new # fp group using rewriting rules, finds its abelianization, # and then lift that quotient
sub:=PreImage(quot,m);
tab0:=AugmentedCosetTableInWholeGroup(sub);
# primary generators
mwrd:=List(tab0!.primaryGeneratorWords,
x->ElementOfFpGroup(FamilyObj(One(fps)),x));
Info(InfoExtReps,4,"mwrd=",mwrd);
mgens:=List(mwrd,x->ImagesRepresentative(quot,x));
nn:=Length(mgens); if IsPermGroup(m) then
e:=SmallerDegreePermutationRepresentation(m);
mfpi:=IsomorphismFpGroupByGenerators(Image(e,m),
List(mgens,x->ImagesRepresentative(e,x)):cheap);
mfpi:=e*mfpi; else
mfpi:=IsomorphismFpGroupByGenerators(m,mgens:cheap); fi;
mmats:=List(mgens,x->ImagesRepresentative(hom,x));
# module relations for i in [1..dim] do
Add(rels,gens[nn+i]^prime); for j in [1..i-1] do
Add(rels,Comm(gens[nn+i],gens[nn+j]));
od; for j in [1..Length(mgens)] do
Add(rels,gens[nn+i]^gens[j]/
LinearCombinationPcgs(gens{[nn+1..nn+dim]},mmats[j][i]));
od;
od;
#extended presentation
for i in RelatorsOfFpGroup(Range(mfpi)) do
i:=LetterRepAssocWord(i);
str:=evalprod(i,e,ei,mmats); if Length(str[1])>0then Error("inconsistent");fi;
Add(rels,AssocWordByLetterRep(FamilyObj(One(newfree)),i)
/LinearCombinationPcgs(gens{[nn+1..nn+dim]},str[2]));
od;
newfree:=newfree/rels; # new extension
Assert(2,
AbelianInvariants(newfree)=AbelianInvariants(PreImage(quot,m)));
mfpi:=GroupHomomorphismByImagesNC(newfree,m,
GeneratorsOfGroup(newfree),Concatenation(mgens,
ListWithIdenticalEntries(dim,One(m))));
# first just try a bit, and see whether this gets all (e.g. if # module is irreducible).
e:=LargerQuotientBySubgroupAbelianization(mfpi,m:cheap); if e<>fail then
step:=0; while step<=1do # Now write down the combined representation in wreath
# this check is very cheap, in comparison. So just be safe
Assert(0,ForAll(RelatorsOfFpGroup(fps),
x->IsOne(MappedWord(x,FreeGeneratorsOfFpGroup(fps),
GeneratorsOfGroup(e!.quot)))));
if step=0then
i:=GroupHomomorphismByImagesNC(e!.quot,p,
GeneratorsOfGroup(e!.quot),
GeneratorsOfGroup(p));
j:=PreImage(i,m); if AbelianInvariants(j)=AbelianInvariants(newfree) then
step:=2;
Info(InfoExtReps,2,"Small bit did good"); else
Info(InfoExtReps,2,"Need expensive version");
e:=LargerQuotientBySubgroupAbelianization(mfpi,m:
cheap:=false);
e:=Intersection(e,
KernelOfMultiplicativeGeneralMapping(quot)); fi; fi;
step:=step+1;
od;
fi;
else if simi=fail then
simi:=IsomorphismSimplifiedFpGroup(Source(quot));
simiq:=InverseGeneralMapping(simi)*quot; fi;
e:=LargerQuotientBySubgroupAbelianization(simiq,m); if e<>fail then
i:=simi*DefiningQuotientHomomorphism(e);
j:=Image(DefiningQuotientHomomorphism(e));;
j:=List(Orbits(j,MovedPoints(j)),x->Stabilizer(j,x[1]));
j:=List(j,x->PreImage(i,x));
e:=Intersection(j);
e:=Intersection(e,KernelOfMultiplicativeGeneralMapping(quot)); fi; fi;
if e<>fail then # can we do better degree -- greedy block reduction?
nn:=e!.quot; if IsTransitive(nn,MovedPoints(nn)) then
repeat
ei:=ShallowCopy(RepresentativesMinimalBlocks(nn,
MovedPoints(nn)));
SortBy(ei,x->-Length(x)); # long ones first
j:=false;
i:=1; while i<=Length(ei) and j=false do
str:=Stabilizer(nn,ei[i],OnSets); if Size(Core(nn,str))=1then
j:=ei[i]; fi;
i:=i+1;
od; if j<>false then
Info(InfoExtReps,4,"deg. improved by blocks ",Size(j)); # action on blocks
i:=ActionHomomorphism(nn,Orbit(nn,j,OnSets),OnSets);
j:=Size(nn); # make new group to not cache anything about old.
nn:=Group(List(GeneratorsOfGroup(nn),
x->ImagesRepresentative(i,x)),());
SetSize(nn,j); fi;
until j=false;
fi; if not IsIdenticalObj(nn,e!.quot) then
Info(InfoExtReps,2,"Degree improved by factor ",
NrMovedPoints(e!.quot)/NrMovedPoints(nn));
e:=SubgroupOfWholeGroupByQuotientSubgroup(FamilyObj(fps),nn,
Stabilizer(nn,1)); fi; elif e=fail and IndexNC(p,m)>trysy then
trysy:=Size(fp); # never try again # can the Sylow subgroup get us something?
m:=SylowSubgroup(p,prime);
e:=PreImage(quot,m);
Info(InfoExtReps,2,"Sylow test for index ",IndexNC(p,m));
i:=IsomorphismFpGroup(e:cheap); # only one TzGo
e:=EpimorphismPGroup(Range(i),prime,PClassPGroup(m)+1);
e:=i*e; # map onto pgroup
j:=KernelOfMultiplicativeGeneralMapping(
InverseGeneralMapping(e)*quot);
i:=RandomSubgroupNotIncluding(Range(e),j,20000); # 20 seconds
Info(InfoExtReps,2,"Sylow found ",IndexNC(p,m)," * ",
IndexNC(Range(e),i)); if IndexNC(Range(e),i)*IndexNC(p,m)< # consider permdegree up to 100000 # as manageable then
e:=PreImage(e,i); #e:=KernelOfMultiplicativeGeneralMapping( # DefiningQuotientHomomorphism(i)); else
e:=fail; # not good fi; fi;
else Info(InfoExtReps,4,"Don't index ",Index(p,m)); fi;
until e<>fail;
i:=p;
quot:=DefiningQuotientHomomorphism(Intersection(e,
KernelOfMultiplicativeGeneralMapping(quot)));
p:=Image(quot);
Info(InfoExtReps,1,"index ",Index(i,m)," increases factor by ",
Size(p)/Size(i)," at degree ",NrMovedPoints(p));
hom:=false; # we don't have hom cheaply any longer as group changed. # this is not an issue if module is irreducible
it:=fail; simi:=fail; # cleanout info for first factor
od;
quot:=sim*quot;
new:=GroupHomomorphismByImages(fp,p,GeneratorsOfGroup(fp),
List(GeneratorsOfGroup(fp),x->ImagesRepresentative(quot,x)));
fi; # if we used factor perm rep, be bolder if IsPermGroup(p) then
new:=new*SmallerDegreePermutationRepresentation(p:cheap:=wasbold<>true);
SetIsomorphismPermGroup(fp,new); elif IsPcGroup(p) then
SetIsomorphismPcGroup(fp,new); fi; fi;
if HasIsSolvableGroup(r.group) then
SetIsSolvableGroup(fp,IsSolvableGroup(r.group)); fi;
return fp; end);
InstallGlobalFunction("CompatiblePairOrbitRepsGeneric",function(cp,coh)
local bas,ran,mats,o; if Length(coh.cohomology)=0then return [coh.zero];fi; if Length(coh.cohomology)=1 and Size(coh.module.field)=2then # 1-dim space over GF(2)
return [coh.zero,coh.cohomology[1]]; fi; # make basis
bas:=Concatenation(coh.coboundaries,coh.cohomology);
ran:=[Length(coh.coboundaries)+1..Length(bas)];
mats:=List(GeneratorsOfGroup(cp),g->List(coh.cohomology,
v->SolutionMat(bas,coh.pairact(v,g)){ran}));
o:=Orbits(Group(mats),coh.module.field^Length(coh.cohomology));
o:=List(o,x->x[1]*coh.cohomology);
return o; end);
############################################################################# ## #M Extensions( G, M ) ##
InstallOtherMethod(Extensions,"generic method for finite groups",
true,[IsGroup and IsFinite,IsObject],
-RankFilter(IsGroup and IsFinite), function(G,M)
local coh;
coh:=TwoCohomologyGeneric(G,M);
return List(Elements(VectorSpace(coh.module.field,coh.cohomology,coh.zero)),
x->FpGroupCocycle(coh,x,true:normalform)); end);
InstallOtherMethod(ExtensionRepresentatives,"generic method for finite groups",
true,[IsGroup and IsFinite,IsObject,IsGroup],
-RankFilter(IsGroup and IsFinite), function(G,M,P)
local coh;
coh:=TwoCohomologyGeneric(G,M);
return List(CompatiblePairOrbitRepsGeneric(P,coh),
x->FpGroupCocycle(coh,x,true:normalform)); 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.87Bemerkung:
¤
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.