-
Notifications
You must be signed in to change notification settings - Fork 0
/
series.gi
97 lines (73 loc) · 2.45 KB
/
series.gi
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
############################################################################
## Central-Elementary Abelian Series of G ##
############################################################################
InstallMethod( CeaSeries, [IsPcpGroup], function( G )
local ser,
cea,
i,
j,
pcp,
relo,
gens,
s,
t,
f,
U;
ser := Filtered( PcpSeries(G), N -> IsNormal(G, N) );
cea := [];
for i in [1..Length(ser)-1] do
Add( cea, ser[i] );
j := Length( cea );
if not IsCentralFactor( G, ser[i], ser[i+1]) then
pcp := Pcp( ser[i], ser[i+1] );
relo := RelativeOrdersOfPcp( pcp );
gens := GeneratorsOfPcp( pcp );
s := Factors( Lcm( relo ) );
#If the group is already a p-group we can store the factor
if Length(s) = 1 then
cea[j]!.ceapcp := pcp;
cea[j]!.ceacentralfactor := false;
#If is not a p-group, refine the pcp
else
f := ShallowCopy( gens );
for t in [1..Length(s)-1] do
f := List( f, x -> x ^ s[t] );
f := AddToIgs( Igs( ser[i+1] ), f );
U := SubgroupByIgs( G, f );
Add( cea, U );
#If is central stop refining
if IsCentralFactor( G, U, ser[i+1]) then
cea[j+t]!.ceacentralfactor := true;
break;
fi;
od;
fi;
else
cea[j]!.ceacentralfactor := true;
fi;
od;
Add( cea, Subgroup( G, [] ) );
return cea;
end );
InstallMethod( PcpsOfCeaSeries, [IsPcpGroup], function(G)
local pcps,
pcp,
ser,
i;
pcps := [];
ser := CeaSeries(G);
for i in [1..Length(ser)-1] do
if IsBound( ser[i]!.ceapcp ) then
pcp := ser[i]!.ceapcp;
else
pcp := Pcp( ser[i], ser[i+1] );
fi;
if IsBound( ser[i]!.ceacentralfactor ) then
pcp!.ceacentralfactor := ser[i]!.ceacentralfactor;
else
pcp!.ceacentralfactor := IsCentralFactor(G, ser[i], ser[i+1]);
fi;
Add( pcps, pcp);
od;
return pcps;
end );