-
Notifications
You must be signed in to change notification settings - Fork 165
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add MinimalNormalSubgroups and Socle for all nilpotent groups
For (finite or infinite) nilpotent groups every normal subgroup intersects the center nontrivially, thus minimal normal subgroups are central. As every central subgroup is normal, minimal normal subgroups are cyclic of prime order. Hence every minimal normal subgroup is in fact a minimal normal subgroup of the socle, where socle is the Omega group of the Center for all prime divisors. Thus Socle method for finite nilpotent groups is rewritten for all nilpotent groups (test file contains examples of pcp and fp groups) using AbelianInvariants and IndependentGeneratorsOfGroup. Rank is increased so that this method would trigger before the finite solvable method. Trivial methods for elementary abelian and simple groups are added. New method for MinimalNormalSubgroups goes over the Sylows of the Socle and makes note of all minimal subgroups. Rank is increased to run this method first. Tests are added.
- Loading branch information
1 parent
570594f
commit 454c0d6
Showing
3 changed files
with
299 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
gap> START_TEST("Socle.tst"); | ||
gap> MinimalNormalSubgroups(Group(())); | ||
[ ] | ||
gap> G := Group(());; NormalSubgroups(G);; MinimalNormalSubgroups(G); | ||
[ ] | ||
gap> D := DihedralGroup(8);; | ||
gap> MinimalNormalSubgroups(D) = [ Center(D) ]; | ||
true | ||
gap> List(MinimalNormalSubgroups(D), IdGroup); | ||
[ [ 2, 1 ] ] | ||
gap> D := DihedralGroup(IsFpGroup, 8);; | ||
gap> MinimalNormalSubgroups(D) = [ Center(D) ]; | ||
true | ||
gap> List(MinimalNormalSubgroups(D), IdGroup); | ||
[ [ 2, 1 ] ] | ||
gap> D := DihedralGroup(IsPcpGroup, 8);; | ||
gap> MinimalNormalSubgroups(D) = [ Center(D) ]; | ||
true | ||
gap> List(MinimalNormalSubgroups(D), IdGroup); | ||
[ [ 2, 1 ] ] | ||
gap> D := Group((1,3),(1,2,3,4));; | ||
gap> MinimalNormalSubgroups(D) = [ Center(D) ]; | ||
true | ||
gap> List(MinimalNormalSubgroups(D), IdGroup); | ||
[ [ 2, 1 ] ] | ||
gap> DDD := DirectProduct(D, D, D);; | ||
gap> List(MinimalNormalSubgroups(DDD), IdGroup); | ||
[ [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ] ] | ||
gap> Q := QuaternionGroup(8);; | ||
gap> MinimalNormalSubgroups(Q) = [ Center(Q) ]; | ||
true | ||
gap> List(MinimalNormalSubgroups(Q), IdGroup); | ||
[ [ 2, 1 ] ] | ||
gap> MinimalNormalSubgroups(SymmetricGroup(4)) = [ Group((1,2)(3,4),(1,3)(2,4)) ]; | ||
true | ||
gap> List(MinimalNormalSubgroups(SymmetricGroup(5)), IdGroup); | ||
[ [ 60, 5 ] ] | ||
gap> List(MinimalNormalSubgroups(AlternatingGroup(5)), IdGroup); | ||
[ [ 60, 5 ] ] | ||
gap> G := Group((1,2),(3,4),(5,6),(7,8));; | ||
gap> IsElementaryAbelian(G); | ||
true | ||
gap> Size(MinimalNormalSubgroups(G)); | ||
15 | ||
gap> MinimalNormalSubgroups(PrimitiveGroup(8,3)) = [ Group([ (1,7)(2,8)(3,5)(4,6), (1,3)(2,4)(5,7)(6,8), (1,2)(3,4)(5,6)(7,8) ]) ]; | ||
true | ||
gap> k := 5;; P := SylowSubgroup(SymmetricGroup(4*k), 2);; A := Group((4*k+1, 4*k+2, 4*k+3));; G := ClosureGroup(P, A);; | ||
gap> Set(MinimalNormalSubgroups(G)) = Set([ Group([ (1,2)(3,4)(5,6)(7,8)(9,10)(11,12)(13,14)(15,16) ]), Group([ (17,18)(19,20) ]), Group([ (1,2)(3,4)(5,6)(7,8)(9,10)(11,12)(13,14)(15,16)(17,18)(19,20) ]), Group([ (21,22,23) ]) ]); | ||
true | ||
gap> A := DihedralGroup(16);; | ||
gap> B := SmallGroup(27, 3);; | ||
gap> C := SmallGroup(125, 4);; | ||
gap> D := DirectProduct(A, B, C, SmallGroup(1536, 2));; | ||
gap> List(MinimalNormalSubgroups(D), IdGroup); | ||
[ [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], | ||
[ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], | ||
[ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], | ||
[ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], | ||
[ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 3, 1 ], [ 3, 1 ], [ 3, 1 ], [ 3, 1 ], | ||
[ 5, 1 ] ] | ||
gap> G := Group([ (4,8)(6,10), (4,6,10,8,12), (2,4,12)(6,10,8), (3,9)(4,6,10,8,12)(7,11), (3,5)(4,6,10,8,12)(9,11), (1,3,11,9,5)(4,6,10,8,12) ]);; | ||
gap> MinimalNormalSubgroups(G) = Set([ Group([ (6,12)(8,10), (2,10)(4,12), (2,12)(6,10) ]), Group([ (5,11)(7,9), (3,9)(7,11), (1,9,5,11,7) ]) ]); | ||
true | ||
gap> F := AbelianPcpGroup([0,0,0]);; | ||
gap> G := F / Subgroup(F, [(F.1*F.2)^180, (F.1*F.2^5)^168]);; | ||
gap> MinimalNormalSubgroups(G); | ||
[ Pcp-group with orders [ 2 ], Pcp-group with orders [ 2 ], | ||
Pcp-group with orders [ 2 ], Pcp-group with orders [ 3 ], | ||
Pcp-group with orders [ 3 ], Pcp-group with orders [ 3 ], | ||
Pcp-group with orders [ 3 ], Pcp-group with orders [ 5 ], | ||
Pcp-group with orders [ 7 ] ] | ||
gap> F := FreeGroup("x", "y", "z");; | ||
gap> x := F.1;; y := F.2;; z := F.3;; | ||
gap> F := FreeGroup("x", "y", "z");; | ||
gap> x := F.1;; y := F.2;; z := F.3;; | ||
gap> G := F/[x^(-1)*y^(-1)*x*y, x^(-1)*z^(-1)*x*z, z^(-1)*y^(-1)*z*y, (x*y)^180, (x*y^5)^168];; | ||
gap> Size(MinimalNormalSubgroups(G)); | ||
9 | ||
gap> MinimalNormalSubgroups(HeisenbergPcpGroup(3)); | ||
[ ] | ||
gap> for G in AllGroups(60) do NormalSubgroups(G);; Print(List(MinimalNormalSubgroups(G), IdGroup), "\n"); od; | ||
[ [ 2, 1 ], [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 2, 1 ], [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 2, 1 ], [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 2, 1 ], [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 60, 5 ] ] | ||
[ [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 4, 2 ], [ 5, 1 ] ] | ||
[ [ 2, 1 ], [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 2, 1 ], [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 2, 1 ], [ 3, 1 ], [ 5, 1 ] ] | ||
[ [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 3, 1 ], [ 5, 1 ] ] | ||
gap> G := SmallGroup(120,5);; List(MinimalNormalSubgroups(G), IdGroup); | ||
[ [ 2, 1 ] ] | ||
gap> G := SmallGroup(120,34);; List(MinimalNormalSubgroups(G), IdGroup); | ||
[ [ 60, 5 ] ] | ||
gap> G := SmallGroup(120,35);; List(MinimalNormalSubgroups(G), IdGroup); | ||
[ [ 2, 1 ], [ 60, 5 ] ] | ||
gap> for G in AllGroups(240) do if not IsSolvable(G) then NormalSubgroups(G);; Print(List(MinimalNormalSubgroups(G), IdGroup), "\n"); fi; od; | ||
[ [ 2, 1 ] ] | ||
[ [ 2, 1 ] ] | ||
[ [ 2, 1 ], [ 60, 5 ] ] | ||
[ [ 2, 1 ], [ 60, 5 ] ] | ||
[ [ 2, 1 ] ] | ||
[ [ 2, 1 ], [ 2, 1 ], [ 2, 1 ] ] | ||
[ [ 2, 1 ], [ 60, 5 ] ] | ||
[ [ 2, 1 ], [ 2, 1 ], [ 2, 1 ], [ 60, 5 ] ] | ||
gap> for G in AllGroups(360) do if not IsSolvable(G) then NormalSubgroups(G);; Print(List(MinimalNormalSubgroups(G), IdGroup), "\n"); fi; od; | ||
[ [ 2, 1 ], [ 3, 1 ] ] | ||
[ [ 360, 118 ] ] | ||
[ [ 3, 1 ], [ 60, 5 ] ] | ||
[ [ 3, 1 ], [ 60, 5 ] ] | ||
[ [ 3, 1 ], [ 60, 5 ] ] | ||
[ [ 2, 1 ], [ 3, 1 ], [ 60, 5 ] ] | ||
gap> G := AbelianGroup([2, 3, 4, 5, 6, 7, 8, 9, 10]);; | ||
gap> Collected(List(Set(MinimalNormalSubgroups(G)), Size)); | ||
[ [ 2, 31 ], [ 3, 13 ], [ 5, 6 ], [ 7, 1 ] ] | ||
gap> G := ElementaryAbelianGroup(2^10);; | ||
gap> Collected(List(Set(MinimalNormalSubgroups(G)), Size)); | ||
[ [ 2, 1023 ] ] | ||
gap> G := ElementaryAbelianGroup(7^4);; | ||
gap> Collected(List(Set(MinimalNormalSubgroups(G)), Size)); | ||
[ [ 7, 400 ] ] | ||
gap> STOP_TEST("Socle.tst", 10000); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters