Greetings from Oregon, where it still hasn't stopped raining.
There is a minor problem with SubnormalSeriesPPermGroup. Here is an
gap> C := Group((1,2,3,4));; C.name := "c4";; gap> gap> sns := SubnormalSeriesPPermGroup( C ); [ c4, Subgroup( c4, [ (1,3)(2,4) ] ), Subgroup( c4, [ ] ) ] gap> gap> sns.elements; [ () ] gap> gap> IsSubgroup(sns, sns); false
The wrong answer in IsSubgroup comes from the wrong value of sns.elements.
The cause of the trouble seems to be a call to TrivialSubgroup in
SubnormalizerSeriesPPermGroup. TrivialSubgroup introduces the element (),
which then persists as the only element ever produced. It would be possible
to revise SubnormalSeriesPPermGroup so as to maintain correct element lists
of all the subgroups in the chains in generates, but it seems to make more
sense simply not to generate any elements at all. The easy way to do that is
to replace the line
H := TrivialSubgroup(G);
H := Subgroup(G, );
in SubnormalSeriesPPermGroup. With this change, SubnormalSeriesPPermGroup
and CentralCompositionSeriesPPermGroup produce chains of subgroups for
which .element is not bound, and hence for which quotient factors can be
computed as called for.
The trivial subgroup strikes again!