Skip to content

Commit 4f70203

Browse files
committed
Add NormalSubgroups methods for Sym and Alt groups
1 parent 3681bec commit 4f70203

File tree

2 files changed

+137
-0
lines changed

2 files changed

+137
-0
lines changed

lib/gpprmsya.gi

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2447,6 +2447,30 @@ InstallMethod( RadicalGroup, "symmetric", true,
24472447
InstallMethod( RadicalGroup, "alternating", true,
24482448
[ IsNaturalAlternatingGroup and IsFinite], 0,RadicalSymmAlt);
24492449

2450+
InstallMethod(NormalSubgroups,
2451+
"for a symmetric group",
2452+
[IsSymmetricGroup],
2453+
RankFilter(IsPermGroup),
2454+
function(S)
2455+
if SymmetricDegree(S) <= 4 then
2456+
# S is soluble, so this includes the trivial group (and Klein 4)
2457+
return DerivedSeriesOfGroup(S);
2458+
fi;
2459+
# DerivedSubgroup is the alternating group
2460+
return [S, DerivedSubgroup(S), TrivialSubgroup(S)];
2461+
end);
2462+
2463+
InstallMethod(NormalSubgroups,
2464+
"for an alternating group",
2465+
[IsAlternatingGroup],
2466+
RankFilter(IsPermGroup),
2467+
function(A)
2468+
if AlternatingDegree(A) <= 4 then
2469+
# S is soluble, so this includes the trivial group (and Klein 4)
2470+
return DerivedSeriesOfGroup(A);
2471+
fi;
2472+
return [A, TrivialSubgroup(A)];
2473+
end);
24502474

24512475
#############################################################################
24522476
##
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
gap> START_TEST("NormalSubgroups.tst");
2+
3+
# Natural symmetric groups
4+
gap> NormalSubgroups(SymmetricGroup(0)) = [Group(())];
5+
true
6+
gap> NormalSubgroups(SymmetricGroup(1)) = [Group(())];
7+
true
8+
gap> Set(NormalSubgroups(SymmetricGroup(2))) =
9+
> Set([Group(()), SymmetricGroup(2)]);
10+
true
11+
gap> Set(NormalSubgroups(SymmetricGroup(3))) =
12+
> Set([Group(()), AlternatingGroup(3), SymmetricGroup(3)]);
13+
true
14+
gap> Set(NormalSubgroups(SymmetricGroup(4))) =
15+
> Set([Group(()), Group((1,2)(3,4), (1,3)(2,4)),
16+
> AlternatingGroup(4), SymmetricGroup(4)]);
17+
true
18+
gap> Set(NormalSubgroups(SymmetricGroup(5))) =
19+
> Set([Group(()), AlternatingGroup(5), SymmetricGroup(5)]);
20+
true
21+
gap> Set(NormalSubgroups(SymmetricGroup(6))) =
22+
> Set([Group(()), AlternatingGroup(6), SymmetricGroup(6)]);
23+
true
24+
gap> Set(NormalSubgroups(SymmetricGroup(100))) =
25+
> Set([Group(()), AlternatingGroup(100), SymmetricGroup(100)]);
26+
true
27+
gap> Set(NormalSubgroups(SymmetricGroup([3,7,4,11,70]))) =
28+
> Set([Group(()), AlternatingGroup([3, 4, 7, 11, 70]),
29+
> SymmetricGroup([3, 4, 7, 11, 70])]);
30+
true
31+
gap> Set(NormalSubgroups(SymmetricGroup([7,4,13,21]))) =
32+
> Set([Group(()), Group((4,7)(13,21), (4,13)(7,21)),
33+
> AlternatingGroup([4, 7, 13, 21]), SymmetricGroup([4, 7, 13, 21])]);
34+
true
35+
gap> NormalSubgroups(SymmetricGroup([42])) = [Group(())];
36+
true
37+
gap> NormalSubgroups(SymmetricGroup([])) = [Group(())];
38+
true
39+
gap> G := Group((7,3,5,11), (11,3), (5,3));;
40+
gap> IsNaturalSymmetricGroup(G);
41+
true
42+
gap> Set(NormalSubgroups(G)) =
43+
> Set([Group(()), Group((3,5)(7,11), (3,7)(5,11)),
44+
> AlternatingGroup([3, 5, 7, 11]), SymmetricGroup([3, 5, 7, 11])]);
45+
true
46+
47+
# Non-natural symmetric groups
48+
gap> S4 := Group((1,2,3,4), (1,2));;
49+
gap> hom := ActionHomomorphism(g, Arrangements([1..4], 4), OnTuples);;
50+
gap> G := Image(hom);;
51+
gap> IsSymmetricGroup(G);
52+
true
53+
gap> SymmetricDegree(G);
54+
4
55+
gap> MovedPoints(G) = [1..24];
56+
true
57+
gap> Set(NormalSubgroups(G)) = Set([G,
58+
> Group([(1,13,9)(2,14,10)(3,15,7)(4,16,8)
59+
> (5,17,12)(6,18,11)(19,23,22)(20,24,21),
60+
> (1,21,16)(2,22,15)(3,19,18)(4,20,17)
61+
> (5,24,13)(6,23,14)(7,11,10)(8,12,9)]),
62+
> Group([(1,24)(2,23)(3,22)(4,21)(5,20)(6,19)
63+
> (7,18)(8,17)(9,16)(10,15)(11,14)(12,13),
64+
> (1,8)(2,7)(3,11)(4,12)(5,9)(6,10)
65+
> (13,21)(14,22)(15,19)(16,20)(17,24)(18,23)]),
66+
> Group(())]);
67+
true
68+
69+
# Natural alternating groups
70+
gap> NormalSubgroups(AlternatingGroup(0)) = [Group(())];
71+
true
72+
gap> NormalSubgroups(AlternatingGroup(1)) = [Group(())];
73+
true
74+
gap> Set(NormalSubgroups(AlternatingGroup(2))) =
75+
> Set([Group(()), AlternatingGroup(2)]);
76+
true
77+
gap> Set(NormalSubgroups(AlternatingGroup(3))) =
78+
> Set([Group(()), AlternatingGroup(3)]);
79+
true
80+
gap> Set(NormalSubgroups(AlternatingGroup(4))) =
81+
> Set([Group(()), Group((1,2)(3,4), (1,3)(2,4)),
82+
> AlternatingGroup(4)]);
83+
true
84+
gap> Set(NormalSubgroups(AlternatingGroup(5))) =
85+
> Set([Group(()), AlternatingGroup(5)]);
86+
true
87+
gap> Set(NormalSubgroups(AlternatingGroup(6))) =
88+
> Set([Group(()), AlternatingGroup(6)]);
89+
true
90+
gap> Set(NormalSubgroups(AlternatingGroup(100))) =
91+
> Set([Group(()), AlternatingGroup(100)]);
92+
true
93+
gap> Set(NormalSubgroups(AlternatingGroup([3,7,4,11,70]))) =
94+
> Set([Group(()), AlternatingGroup([3, 4, 7, 11, 70])]);
95+
true
96+
gap> Set(NormalSubgroups(AlternatingGroup([7,4,13,21]))) =
97+
> Set([Group(()), Group((4,7)(13,21), (4,13)(7,21)),
98+
> AlternatingGroup([4, 7, 13, 21])]);
99+
true
100+
gap> NormalSubgroups(AlternatingGroup([42])) = [Group(())];
101+
true
102+
gap> NormalSubgroups(AlternatingGroup([])) = [Group(())];
103+
true
104+
gap> G := Group((7,3,5), (11,3,7));;
105+
gap> IsNaturalAlternatingGroup(G);
106+
true
107+
gap> Set(NormalSubgroups(G)) =
108+
> Set([Group(()), Group((3,5)(7,11), (3,7)(5,11)),
109+
> AlternatingGroup([3, 5, 7, 11])]);
110+
true
111+
112+
#
113+
gap> STOP_TEST( "NormalSubgroups.tst", 1);

0 commit comments

Comments
 (0)