Skip to content

Commit

Permalink
Merge pull request #400 from fingolfin/mh/fit-frat-nilpotent
Browse files Browse the repository at this point in the history
Mark FittingSubgroup and FrattiniSubgroup as nilpotent
  • Loading branch information
fingolfin committed Feb 5, 2016
2 parents c7539b6 + 99d75cd commit 60eff02
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 7 deletions.
18 changes: 12 additions & 6 deletions lib/grp.gi
Original file line number Diff line number Diff line change
Expand Up @@ -990,19 +990,20 @@ InstallMethod( Exponent,
#M FittingSubgroup( <G> ) . . . . . . . . . . . Fitting subgroup of a group
##
InstallMethod( FittingSubgroup, "for nilpotent group",
[ IsGroup and IsNilpotentGroup ], 0, IdFunc );
[ IsGroup and IsNilpotentGroup ], SUM_FLAGS, IdFunc );

InstallMethod( FittingSubgroup,
"generic method for groups",
[ IsGroup and IsFinite ],
function (G)
if IsTrivial (G) then
return G;
else
return SubgroupNC( G, Filtered(Union( List( Set( FactorsInt( Size( G ) ) ),
if not IsTrivial( G ) then
G := SubgroupNC( G, Filtered(Union( List( Set( FactorsInt( Size( G ) ) ),
p -> GeneratorsOfGroup( PCore( G, p ) ) ) ),
p->p<>One(G)));
Assert( 2, IsNilpotentGroup( G ) );
SetIsNilpotentGroup( G, true );
fi;
return G;
end);

RedispatchOnCondition( FittingSubgroup, true, [IsGroup], [IsFinite], 0);
Expand All @@ -1019,7 +1020,12 @@ local m;
return G;
fi;
m:=List(ConjugacyClassesMaximalSubgroups(G),C->Core(G,Representative(C)));
return Intersection(m);
m := Intersection(m);
if HasIsFinite(G) and IsFinite(G) then
Assert(2,IsNilpotentGroup(m));
SetIsNilpotentGroup(m,true);
fi;
return m;
end);


Expand Down
5 changes: 4 additions & 1 deletion lib/grppcatr.gi
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,10 @@ InstallMethod( FrattiniSubgroup,
0,

function( G )
return Core( G, PrefrattiniSubgroup( G ) );
G := Core( G, PrefrattiniSubgroup( G ) );
Assert( 2, IsNilpotentGroup( G) );
SetIsNilpotentGroup( G, true );
return G;
end);


Expand Down
3 changes: 3 additions & 0 deletions lib/maxsub.gi
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,9 @@ local m,f,i;
f:=Core(G,NormalIntersection(f,m[i]));
fi;
od;
if HasIsFinite(G) and IsFinite(G) then
SetIsNilpotentGroup(f,true);
fi;
return f;
end);

Expand Down
48 changes: 48 additions & 0 deletions tst/testinstall/opers/FittingSubgroup.tst
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
gap> START_TEST("FittingSubgroup.tst");

#
gap> G:=SylowSubgroup(SymmetricGroup(5),2);;
gap> HasIsNilpotentGroup(G);
true
gap> IsIdenticalObj(G, FittingSubgroup(G));
true

#
gap> G := CyclicGroup(IsPermGroup, 12);;
gap> IsIdenticalObj(G, FittingSubgroup(G));
true
gap> G := CyclicGroup(IsPcGroup, 12);;
gap> IsIdenticalObj(G, FittingSubgroup(G));
true

#
gap> List(AllSmallGroups(60), g -> Size(FittingSubgroup(g)));
[ 30, 30, 30, 60, 1, 15, 15, 15, 20, 30, 30, 30, 60 ]
gap> ForAll(AllSmallGroups(60), g -> IsNormal(g, FrattiniSubgroup(g)));
true

#
gap> g := SL(2,5);;
gap> f := FittingSubgroup(g);; Size(f);
2
gap> HasIsNilpotentGroup(f);
true
gap> p := SylowSubgroup(g, 2);;
gap> HasIsNilpotentGroup(p);
true
gap> HasIsNilpotentGroup(FittingSubgroup(p));
true

#
gap> g := SL(IsPermGroup,2,5);;
gap> f := FittingSubgroup(g);;
gap> HasIsNilpotentGroup(f);
true
gap> p := SylowSubgroup(g, 2);;
gap> HasIsNilpotentGroup(p);
true
gap> HasIsNilpotentGroup(FittingSubgroup(p));
true

#
gap> STOP_TEST("FittingSubgroup.tst", 1);
51 changes: 51 additions & 0 deletions tst/testinstall/opers/FrattiniSubgroup.tst
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
gap> START_TEST("FrattiniSubgroup.tst");

#
gap> FrattiniSubgroup(SymmetricGroup(3));
Group(())
gap> FrattiniSubgroup(SymmetricGroup(4));
Group(())
gap> FrattiniSubgroup(SymmetricGroup(5));
Group(())

#
gap> FrattiniSubgroup(CyclicGroup(IsPermGroup, 3));
Group(())
gap> FrattiniSubgroup(CyclicGroup(IsPermGroup, 9));
Group([ (1,4,7)(2,5,8)(3,6,9) ])
gap> FrattiniSubgroup(CyclicGroup(IsPcGroup, 3));
Group([ ])
gap> FrattiniSubgroup(CyclicGroup(IsPcGroup, 9));
Group([ f2 ])

#
gap> List(AllSmallGroups(60), g -> Size(FrattiniSubgroup(g)));
[ 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
gap> ForAll(AllSmallGroups(60), g -> IsNormal(g, FrattiniSubgroup(g)));
true

#
gap> g := SL(2,5);;
gap> f := FrattiniSubgroup(g);
<group of 2x2 matrices of size 2 over GF(5)>
gap> HasIsNilpotentGroup(f);
true
gap> p := SylowSubgroup(g, 2);;
gap> HasIsNilpotentGroup(p);
true
gap> HasIsNilpotentGroup(FrattiniSubgroup(p));
true

#
gap> g := SL(IsPermGroup,2,5);;
gap> f := FrattiniSubgroup(g);;
gap> HasIsNilpotentGroup(f);
true
gap> p := SylowSubgroup(g, 2);;
gap> HasIsNilpotentGroup(p);
true
gap> HasIsNilpotentGroup(FrattiniSubgroup(p));
true

#
gap> STOP_TEST("FrattiniSubgroup.tst", 1);

0 comments on commit 60eff02

Please sign in to comment.