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 trans.gi GAP transitive groups library Alexander Hulpke ## ## #Y Copyright (C) 2001, Alexander Hulpke, Colorado State University ## ## This file contains methods that rely on the transitive groups library ## being available. ## # computes the perfect subgroups of S_n or A_n. Symconj indicates whether # they are up to conjugacy in S_n. BindGlobal("PerfectSubgroupsAlternatingGroup",function(g,symconj) local dom,deg,S,p,ps,perm,startp,sdps,nsdps,i,j,k,l,m,n,part, sysdps,syj,nk,kno,nl,lno,khom,kim,lhom,lim,iso,au,ind1,ind2,dc,d,grp, knom,lnon; dom:=Set(MovedPoints(g)); deg:=Length(dom); p:=[TrivialSubgroup(g)]; if deg<5 then return p; fi; if deg>TRANSDEGREES then TryNextMethod(); fi; S:=SymmetricGroup(deg); # all partitions with (nontrivial) orbits of length part:=Filtered(Partitions(deg),i->Length(i)<deg and ForAll(i,j->j=1 or j>4)); # we shall use implicitly, that the partitions are ordered reversly. I.e. # all sdps constructed don't have any earlier fixpoints &c. for i in part do Info(InfoLattice,1,"Partition: ",i); # for each partition construct all subdirect products. sdps:=[]; startp:=1; # point we start on for j in i do if j>4 then Info(InfoLattice,3,j,", ",Length(sdps)," products"); perm:=MappingPermListList([1..j],[startp..startp+j-1]); # get the transitive ones of this degree. ps:=AllTransitiveGroups(NrMovedPoints,j,IsPerfectGroup,true); ps:=List(ps,i->i^perm); if Length(sdps)=0 then sdps:=ps; else nsdps:=[]; # now we must form spds: run through all pairs sysdps:=SymmetricGroup(MovedPoints(sdps[1])); syj:=SymmetricGroup(j); for k in sdps do nk:=NormalSubgroups(k); kno:=Normalizer(sysdps,k); for l in ps do nl:=NormalSubgroups(l); lno:=Normalizer(syj,k); # run through all combinations of normal subgroups for m in nk do knom:=Normalizer(kno,m); for n in nl do lnon:=Normalizer(lno,n); if Index(k,m)=Index(l,n) then # factor groups have the same order. khom:=NaturalHomomorphismByNormalSubgroupNC(k,m); kim:=Image(khom); lhom:=NaturalHomomorphismByNormalSubgroupNC(l,n); lim:=Image(lhom); iso:=IsomorphismGroups(kim,lim); if iso<>fail then # they are isomorphic. So there are subdirect # products. Classify them up to conjugacy (Satz (32) # in my thesis) au:=AutomorphismGroup(lim); # those automorphisms induced by the normalizer of k ind1:=List(GeneratorsOfGroup(knom), y->GroupHomomorphismByImagesNC(lim,lim, GeneratorsOfGroup(lim), List(GeneratorsOfGroup(lim), z->Image(iso, Image(khom,PreImagesRepresentative(khom, PreImagesRepresentative(iso,z) )^y) )))); Assert(1,ForAll(ind1,IsBijective)); # those automorphisms induced by the normalizer of l ind2:=List(GeneratorsOfGroup(lnon), y->GroupHomomorphismByImagesNC(lim,lim, GeneratorsOfGroup(lim), List(GeneratorsOfGroup(lim), z->Image(lhom,PreImagesRepresentative(lhom,z)^y)))); Assert(1,ForAll(ind1,IsBijective)); dc:=DoubleCosetRepsAndSizes(au,SubgroupNC(au,ind1), SubgroupNC(au,ind2)); dc:=List(dc,i->i[1]); # only reps for d in dc do grp:=ClosureGroup(n, List(GeneratorsOfGroup(k),i->i* PreImagesRepresentative(lhom, Image(d,Image(iso,Image(khom,i))) )) ); Add(nsdps,grp); od; fi; fi; od; od; od; od; sdps:=nsdps; fi; fi; startp:=startp+j; od; # S_n classes nsdps:=[]; for j in sdps do if ForAll(nsdps,k->Size(k)<>Size(j) or Set(MovedPoints(k))<>Set(MovedPoints(l)) or RepresentativeAction( # if they are conjugate in S_deg they are conjugate # in the smaller S_n on their moved points Stabilizer(S,Difference([1..deg], MovedPoints(k)),OnTuples), j,k)=fail) then Add(nsdps,j); fi; od; Info(InfoLattice,2,j,", ",Length(sdps)," new perfect groups"); if symconj then Append(p,nsdps); else for j in nsdps do n:=Normalizer(S,j); Add(p,j); if SignPermGroup(n)=1 then Add(p,ConjugateGroup(j,(1,2))); # Normalizer in A_n: 2 orbits fi; od; fi; od; if dom<>[1..deg] then perm:=MappingPermListList([1..deg],dom); p:=List(p,i->i^perm); fi; return p; end); ############################################################################# ## #M RepresentativesPerfectSubgroups ## InstallMethod(RepresentativesPerfectSubgroups,"alternating",true, [ IsNaturalAlternatingGroup ], 0, G->PerfectSubgroupsAlternatingGroup(G,false)); InstallMethod(RepresentativesPerfectSubgroups,"symmetric",true, [ IsNaturalSymmetricGroup ], 0, G->PerfectSubgroupsAlternatingGroup(G,true));