/usr/share/gap/trans/trans.gi is in gap-trans-groups 4r6p5-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | #############################################################################
##
#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));
|