Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346############################################################################# ## #W initmat.gi AutPGrp package Bettina Eick ## ############################################################################# ## #F TwoStepCentralizersByLcs( G ) ## ## The two-step-centralizers of lower p-central series of G. ## TwoStepCentralizersByLcs := function( G ) local pcgs, first, p, field, list, i, f, m, n, max, pcgsN, pcgsM, pcgsH, gensL, gensC, pcgsR, new; # set up pcgs := SpecialPcgs( G ); first := LGFirst( pcgs ); p := PrimePGroup( G ); field := GF(p); list := []; max := Length(pcgs); # run through lower p-central series for i in [3..Length(first)] do f := first[i-2]; m := first[i-1]; n := first[i]; pcgsN := InducedPcgsByPcSequenceNC( pcgs, pcgs{[f..max]} ); pcgsM := InducedPcgsByPcSequenceNC( pcgs, pcgs{[m..max]} ); pcgsH := InducedPcgsByPcSequenceNC( pcgs, pcgs{[n..max]} ); gensL := pcgsN mod pcgsM; gensC := pcgs mod pcgsM; pcgsR := pcgsM mod pcgsH; new := NextStepCentralizer( gensL, gensC, pcgsR, field ); Append(new, pcgsM ); #new := InducedPcgsByPcSequenceNC( pcgs, new ); new := InducedPcgsByGeneratorsNC( pcgs, new ); Add( list, SubgroupByPcgs( G, new ) ); od; return list; end; ############################################################################# ## #F OmegaSubgroupsByLcs( G ) ## ## The preimages of Omega-subgroups of G_i for all factors G_i of the lower ## p-central series of G. ## OmegaSubgroupsByLcs := function( G ) local pcgs, first, p, field, list, max, i, pcgsN, N, hom, F, ser, specF; # catch the trivial case p := PrimePGroup( G ); pcgs := SpecialPcgs( G ); if ForAll( pcgs, x -> Order(x) = p ) then return []; fi; # set up first := LGFirst( pcgs ); field := GF(p); list := []; max := Length(pcgs); # run through lower p-central series for i in [2..Length(first)] do pcgsN := InducedPcgsByPcSequenceNC( pcgs, pcgs{[first[i]..max]} ); N := SubgroupByPcgs( G, pcgsN ); hom := NaturalHomomorphismByNormalSubgroupNC( G, N ); F := Image( hom ); specF := SpecialPcgs(F); if ForAny( specF, x -> Order(x) > p ) and Size(F) < 10000 then ser := OmegaSeries( F ); ser := List( ser, x -> PreImage( hom, x ) ); Append( list, ser ); fi; od; return list; end; ############################################################################# ## #F MaxSubIntersections(G) ## MaxSubIntersections := function(G) local max, fp, fpset, fpbin, i, j; max := MaximalSubgroups(G); fp := List(max, IdGroup); fpset := Set(fp); fpbin := List(fpset, x -> []); for i in [1..Length(max)] do j := Position(fpset, fp[i]); Add(fpbin[j], max[i]); od; return List(fpbin, Intersection); end; ############################################################################# ## #F PGCharSubgroups( G ) ## PGCharSubgroups := function(G) local cent, omega; cent := TwoStepCentralizersByLcs( G ); omega := OmegaSubgroupsByLcs( G ); if Size(G) <= 512 then return Union(cent, omega, MaxSubIntersections(G)); else return Union( cent, omega ); fi; end; ############################################################################# ## #F FrattiniQuotientBase( <spec>, <U> ) ## FrattiniQuotientBase := function( spec, U ) local r, frat, pcgs, subU, base; r := LGFirst(spec)[2]; frat := InducedPcgsByPcSequenceNC( spec, spec{[r..Length(spec)]} ); pcgs := spec mod frat; subU := Filtered(InducedPcgs(spec, U), x -> DepthOfPcElement(spec,x)<r); base := List( subU, x -> ExponentsOfPcElement( pcgs, x ) ); return base; end; ############################################################################# ## #F InitAutomorphismGroupChar( G ) ## InitAutomorphismGroupChar := function( G ) local r, p, chars, bases, S, H, A, z, spec, kern; Info( InfoAutGrp, 2, " init automorphism group : Char "); # set up r := RankPGroup( G ); p := PrimePGroup( G ); z := One(GF(p)); spec := SpecialPcgs( G ); # compute characteristic subgroups Info( InfoAutGrp, 3, " compute characteristic subgroups "); chars := PGCharSubgroups( G ); bases := List( chars, x -> FrattiniQuotientBase( spec, x ) ) * z; # compute the matrixgroup stabilising all subspaces in chain Info( InfoAutGrp, 3, " compute stabilizer "); S := StabilizingMatrixGroup( bases, r, p ); # the Frattini Quotient H := FrattiniQuotientPGroup( G ); kern := InitAgAutos( H, p ); # the aut group A := rec( ); A.glAutos := InitGlAutos( H, GeneratorsOfGroup(S) ); A.glOrder := Size(S) / Product( kern.rels ); A.glOper := GeneratorsOfGroup(S); Assert(1,IsInt(A.glOrder)); A.agAutos := kern.auts; A.agOrder := kern.rels; A.one := IdentityPGAutomorphism( H ); A.group := H; A.size := A.glOrder * Product( A.agOrder ); # try to construct perm rep NiceInitGroup( A, true ); return A; end; ############################################################################# ## #F InitAutomorphismGroupFull( G ) ## InitAutomorphismGroupFull := function( G ) local r, p, S, H, A, kern; Info( InfoAutGrp, 2, " init automorphism group : Full "); # set up r := RankPGroup( G ); p := PrimePGroup( G ); S := GL(r, p); H := FrattiniQuotientPGroup( G ); kern := InitAgAutos( H, p ); # the aut group A := rec( ); A.glAutos := InitGlAutos( H, GeneratorsOfGroup(S) ); A.glOrder := Size(S) / Product( kern.rels ); A.glOper := GeneratorsOfGroup( S ); Assert(1,IsInt(A.glOrder)); A.agAutos := kern.auts; A.agOrder := kern.rels; A.one := IdentityPGAutomorphism( H ); A.group := H; A.size := A.glOrder * Product( A.agOrder ); # try to compute perm rep NiceInitGroup( A, false ); return A; end;