The p-central series of a group G is the descending sequence of subgroups G= P_(0)(G) >= ... >= P_(i - 1)(G) >= P_i(G) >= ... >= where P_i(G)=[P_(i - 1)(G), G]P_(i - 1)(G)^p for i >= 1.
If P_c(G)=1 and c is the smallest such integer then G has p-class c. A group with p-class c is nilpotent and has nilpotency class at most c.
Let G be a finite p-group with Frattini rank d and class c. A group H is a descendant of G if H has Frattini rank d and the quotient H/P_c(H) is isomorphic to G. A group is an immediate descendant of G if it is a descendant of G and has class c + 1.
The p-group generation algorithm allows the construction of (immediate) descendants of a p-group. For a description of this algorithm, see [New77], [O'B90].
SetVerbose ("GeneratepGroups", 1) will provide information on the progress of the algorithm.
Generate all d-generator p-class at most c p-groups.
Exponent: RngIntElt Default: 0All groups constructed satisfy the supplied exponent.
OrderBound: RngIntElt Default: 0Given OrderBound := n, all groups constructed have order at most p^n.
StepSizes: [RngIntElt] Default: nullConstruct descendants of order p^((n + s)) of a group of order p^n only for s in StepSizes.
All: BoolElt Default: trueIf true, return all groups. Otherwise, return only the capable groups (those which have descendants).
Construct descendants of G having p-class at most c; if c is not supplied, it is assumed to be one larger than the p-class of G. This function supports the same variable arguments as GeneratepGroups.
> G := DihedralGroup(GrpPC, 16);
> T := Descendants (G, 8);
> #T;
12
> H := T[5];
> H;
GrpPC : H of order 128 = 2^7
PC-Relations:
H.1^2 = H.7,
H.2^2 = H.3 * H.4,
H.3^2 = H.4 * H.5,
H.4^2 = H.5 * H.6,
H.5^2 = H.6 * H.7,
H.6^2 = H.7,
H.2^H.1 = H.2 * H.3,
H.3^H.1 = H.3 * H.4,
H.4^H.1 = H.4 * H.5,
H.5^H.1 = H.5 * H.6,
H.6^H.1 = H.6 * H.7
> T := GeneratepGroups(2, 2, 10: Exponent := 4); > "The number of 2-generator exponent 4 groups is ", # T; The number of 2-generator exponent 4 groups is 26What are their soluble lengths?
> for i := 1 to #T do > "Group ", i, " has soluble length ", DerivedLength (T[i]); > end for; Group 1 has soluble length 1 Group 2 has soluble length 2 Group 3 has soluble length 2 Group 4 has soluble length 1 Group 5 has soluble length 2 Group 6 has soluble length 2 Group 7 has soluble length 2 Group 8 has soluble length 2 Group 9 has soluble length 2 Group 10 has soluble length 2 Group 11 has soluble length 2 Group 12 has soluble length 2 Group 13 has soluble length 2 Group 14 has soluble length 2 Group 15 has soluble length 2 Group 16 has soluble length 2 Group 17 has soluble length 2 Group 18 has soluble length 2 Group 19 has soluble length 2 Group 20 has soluble length 2 Group 21 has soluble length 3 Group 22 has soluble length 3 Group 23 has soluble length 3 Group 24 has soluble length 3 Group 25 has soluble length 3 Group 26 has soluble length 3
> IsGoodGroup := function(G, k) > > ncl := # Classes(G); > > O := FactoredOrder(G); > p := O[1][1]; > m := O[1][2]; > n := Floor(m / 2); > e := m - n * 2; > Desired := n * (p^2 - 1) + p^e + k * (p - 1) * (p^2 - 1); > > return (Desired eq ncl); > > end function;Then, we generate the potential candidates and check each.
> a := GeneratepGroups (3, 2, 4 : OrderBound := 5); > #a; 42 > > for i := 1 to #a do > G := a[i]; > if IsGoodGroup(G, 0) then > "Group ", i, " of order ", Order(G), " has abundance 0"; > end if; > end for; Group 1 of order 9 has abundance 0 Group 3 of order 27 has abundance 0 Group 4 of order 27 has abundance 0 Group 11 of order 81 has abundance 0 Group 12 of order 81 has abundance 0 Group 13 of order 81 has abundance 0 Group 14 of order 81 has abundance 0 Group 40 of order 243 has abundance 0 Group 41 of order 243 has abundance 0 Group 42 of order 243 has abundance 0