Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new method for IsSolvableGroup #3278

Merged
merged 6 commits into from Mar 22, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 3 additions & 3 deletions doc/tut/group.xml
Expand Up @@ -833,9 +833,9 @@ usual way we now look for the subgroups above <C>u105</C>.
gap> blocks := Blocks( a8, orb );; Length( blocks );
15
gap> Set(blocks[1]);
[ (1,2)(3,4)(5,6)(7,8), (1,3)(2,4)(5,8)(6,7), (1,4)(2,3)(5,7)(6,8),
(1,5)(2,6)(3,8)(4,7), (1,6)(2,5)(3,7)(4,8), (1,7)(2,8)(3,6)(4,5),
(1,8)(2,7)(3,5)(4,6) ]
[ (1,2)(3,4)(5,6)(7,8), (1,3)(2,4)(5,7)(6,8), (1,4)(2,3)(5,8)(6,7),
(1,5)(2,6)(3,7)(4,8), (1,6)(2,5)(3,8)(4,7), (1,7)(2,8)(3,5)(4,6),
(1,8)(2,7)(3,6)(4,5) ]
]]></Example>
<P/>
To find the subgroup of index 15 we again use closure. Now we must be a
Expand Down
4 changes: 2 additions & 2 deletions lib/ctbl.gd
Expand Up @@ -4103,10 +4103,10 @@ DeclareOperation( "CharacterTableIsoclinic",
## gap> tg:= CharacterTable( g );;
## gap> IsRecord(
## > TransformingPermutationsCharacterTables( index2[1], tg ) );
## false
## true
## gap> IsRecord(
## > TransformingPermutationsCharacterTables( index2[2], tg ) );
## true
## false
## ]]></Example>
## <P/>
## Alternatively, we could construct the character table of the central
Expand Down
30 changes: 30 additions & 0 deletions lib/grp.gi
Expand Up @@ -563,6 +563,10 @@ InstallMethod( IsAlmostSimpleGroup,
## By the odd order theorem, N is solvable, and so is G. Thus the order of
## any non-solvable finite group is a multiple of 4.
##
## By Burnside's theorem, every group of order p^a q^b is solvable. If a
## group of such order is not already caught by the reasoning above, then
## it must have order 2^a q^b with a>1.
##
InstallImmediateMethod( IsSolvableGroup, IsGroup and HasSize, 10,
function( G )
local size;
Expand All @@ -573,6 +577,32 @@ InstallImmediateMethod( IsSolvableGroup, IsGroup and HasSize, 10,
TryNextMethod();
end );

InstallMethod( IsSolvableGroup,
"if group size is known and is not divisible by 4 or p^a q^b",
[ IsGroup and HasSize ], 25,
function( G )
local size;
size := Size( G );
if IsInt( size ) then
if size mod 4 <> 0 then
hulpke marked this conversation as resolved.
Show resolved Hide resolved
return true;
else
size := size/4;
while size mod 2 = 0 do
hulpke marked this conversation as resolved.
Show resolved Hide resolved
size := size/2;
od;
if size = 1 then
SetIsPGroup( G, true );
SetPrimePGroup( G, 2 );
return true;
elif IsPrimePowerInt( size ) then
return true;
fi;
fi;
fi;
TryNextMethod();
end );

InstallMethod( IsSolvableGroup,
"generic method for groups",
[ IsGroup ],
Expand Down
2 changes: 1 addition & 1 deletion lib/morpheus.gd
Expand Up @@ -509,7 +509,7 @@ DeclareGlobalFunction("IsomorphismGroups");
## gap> h:=Group((1,2,3),(1,2));
## Group([ (1,2,3), (1,2) ])
## gap> quo:=GQuotients(g,h);
## [ [ (1,3,2,4), (1,2,3) ] -> [ (2,3), (1,2,3) ] ]
## [ [ (1,2,3,4), (1,3,4) ] -> [ (2,3), (1,2,3) ] ]
## ]]></Example>
## </Description>
## </ManSection>
Expand Down
6 changes: 3 additions & 3 deletions lib/teaching.g
Expand Up @@ -197,9 +197,9 @@ DeclareGlobalFunction("CosetDecomposition");
## <A>H</A>-conjugacy.
## <Example><![CDATA[
## gap> AllHomomorphismClasses(SymmetricGroup(4),SymmetricGroup(3));
## [ [ (1,2,3,4), (1,2) ] -> [ (), () ],
## [ (1,2,3,4), (1,2) ] -> [ (2,3), (1,2) ],
## [ (1,2,3,4), (1,2) ] -> [ (1,2), (1,2) ] ]
## [ [ (1,2,3), (2,4) ] -> [ (), () ],
## [ (1,2,3), (2,4) ] -> [ (), (1,2) ],
## [ (1,2,3), (2,4) ] -> [ (1,2,3), (1,2) ] ]
## ]]></Example>
## </Description>
## </ManSection>
Expand Down
15 changes: 15 additions & 0 deletions tst/testinstall/opers/IsSolvableGroup.tst
Expand Up @@ -33,6 +33,12 @@ gap> A := AbelianGroup([3,3,3]);; H := AutomorphismGroup(A);;
gap> B := SylowSubgroup(H, 13);; G := SemidirectProduct(B, A);;
gap> HasIsSolvableGroup(G) and IsSolvable(G);
true
gap> G := DirectProduct(CyclicGroup(27), SymmetricGroup(3));;
gap> IsSolvableGroup(G);
true
gap> G := DirectProduct(CyclicGroup(6), SymmetricGroup(4));;
gap> IsSolvableGroup(G);
true

## some fp-groups
## The following four tests check whether the current IsSolvable method using
Expand All @@ -53,4 +59,13 @@ true
gap> G := F/[ a^2, b^2, c^2, d^2, (a*b)^3, (b*c)^3, (c*d)^3, (a*c)^2, (a*d)^2, (b*d)^2 ];;
gap> not IsSolvable(G) and HasIsAbelian(G) and not IsAbelian(G);
true
gap> G := F/[ a^2, b^2, c^2, d^2, (a*b)^3, (b*c)^3, (c*d)^3, (a*c)^2, (a*d)^2, (b*d)^2 ];; Size(G);;
gap> not IsSolvable(G) and not IsAbelian(G);
true
gap> F := FreeGroup("a", "x");; a := F.1;; x := F.2;;
gap> G := F/[x^2*a^8, a^16, x*a*x^(-1)*a];; Size(G);;
gap> IsSolvableGroup(G) and IsPGroup(G) and IsNilpotentGroup(G);
true
fingolfin marked this conversation as resolved.
Show resolved Hide resolved
gap> PrimePGroup(G);
2
gap> STOP_TEST("IsSolvableGroup.tst", 1);