Document IsFrattiniFree and add methods for computing it - #6487
Open
fingolfin wants to merge 1 commit into
Open
Conversation
The property IsFrattiniFree was declared in grppcaut.gd but undocumented and without any methods, so it could only ever be used after something had set it explicitly. Move the declaration next to FrattiniSubgroup in grp.gd, document it, and install methods for finite groups. For a finite nilpotent group the property holds if and only if all Sylow subgroups are elementary abelian, which needs no subgroup computations at all. The generic method first checks whether the group order is squarefree, and otherwise uses that Phi(N) <= Phi(G) for N normal in G: applied to the Fitting subgroup this rules out most groups without ever looking at maximal subgroups, and for nilpotent groups it decides the question outright. Only then is Phi(G) computed. Conversely, a known Frattini subgroup decides the property, and a group known to be Frattini-free has a trivial one. The new implication that a finite nilpotent Frattini-free group is abelian also shows up in the documented example output of ShowImpliedFilters, which is adjusted accordingly. Note that morpheus.gi and grppcext.gi still guard their use of the property with HasIsFrattiniFree. Now that it is computable, dropping that guard in morpheus.gi would let solvable groups use the faster AutomorphismGroupFrattFreeGroup path, but that affects every solvable automorphism group computation and is left for a separate change. Prepared with the help of Claude Code (Opus 5), which wrote the implementation, documentation and tests, and ran the test suites. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fingolfin
force-pushed
the
claude/gap-isfrattinifree-expand-5efcbc
branch
from
August 5, 2026 20:03
cfa47fd to
4391603
Compare
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The property
IsFrattiniFreewas declared inlib/grppcaut.gd, but it was undocumented and had no methods at all, soIsFrattiniFree(G)raised a "no method found" error unless something had set the property explicitly beforehand (asrandiso.gidoes). This documents it and makes it computable for finite groups.The declaration moves next to
FrattiniSubgroupinlib/grp.gd, together with implications in both directions: trivial, elementary abelian and finite simple groups are Frattini-free, while a finite Frattini-free p-group is elementary abelian and a finite Frattini-free nilpotent group is abelian.The methods try to avoid computing the Frattini subgroup:
Phi(N) <= Phi(G)forNnormal inG: applied to the Fitting subgroup, this decides many groups negatively without ever looking at maximal subgroups, and ifG = F(G)it decides the question outright. Only then isPhi(G)computed.The Fitting subgroup criterion is where most of the speedup comes from, e.g.
GL(3,5)13ms instead of 476ms,WreathProduct(DihedralGroup(IsPermGroup,8), AlternatingGroup(5))13ms instead of 70ms. When the answer istrueit costs one extra Fitting subgroup computation, which is usually work the Frattini subgroup computation performs anyway.Note that
morpheus.giandgrppcext.gistill guard their use of the property withHasIsFrattiniFree. Now that it is computable, dropping that guard inmorpheus.giwould let solvable groups use the much fasterAutomorphismGroupFrattFreeGrouppath, but that affects every solvable automorphism group computation, so it is left for a separate change.Besides the new test file, the property was checked to agree with
IsTrivial(FrattiniSubgroup(G))for all groups in the small groups library of order at most 300, all transitive groups of degree at most 12, and all perfect groups of order at most 10^5.AI disclosure: prepared with the help of Claude Code (Opus 5), which wrote the implementation, documentation and tests, ran the test suites and drafted this description.