Skip to content

Document IsFrattiniFree and add methods for computing it - #6487

Open
fingolfin wants to merge 1 commit into
gap-system:masterfrom
fingolfin:claude/gap-isfrattinifree-expand-5efcbc
Open

Document IsFrattiniFree and add methods for computing it#6487
fingolfin wants to merge 1 commit into
gap-system:masterfrom
fingolfin:claude/gap-isfrattinifree-expand-5efcbc

Conversation

@fingolfin

Copy link
Copy Markdown
Member

The property IsFrattiniFree was declared in lib/grppcaut.gd, but it was undocumented and had no methods at all, so IsFrattiniFree(G) raised a "no method found" error unless something had set the property explicitly beforehand (as randiso.gi does). This documents it and makes it computable for finite groups.

The declaration moves next to FrattiniSubgroup in lib/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:

  • For a finite nilpotent group the property holds if and only if all Sylow subgroups are elementary abelian, i.e. if and only if the group is abelian of squarefree exponent. This needs no subgroup computations at all.
  • The generic method for finite groups first checks whether the group order is squarefree. Otherwise it uses that Phi(N) <= Phi(G) for N normal in G: applied to the Fitting subgroup, this decides many groups negatively without ever looking at maximal subgroups, and if G = F(G) it decides the question outright. Only then is Phi(G) computed.
  • Conversely a known Frattini subgroup decides the property (also for groups not known to be finite), and a group known to be Frattini-free has a trivial Frattini subgroup.

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 is true it costs one extra Fitting subgroup computation, which is usually work the Frattini subgroup computation performs anyway.

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 much faster AutomorphismGroupFrattFreeGroup path, 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.

@fingolfin fingolfin added release notes: use title For PRs: the title of this PR is suitable for direct use in the release notes topic: library kind: new feature labels Aug 5, 2026
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
fingolfin force-pushed the claude/gap-isfrattinifree-expand-5efcbc branch from cfa47fd to 4391603 Compare August 5, 2026 20:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind: new feature release notes: use title For PRs: the title of this PR is suitable for direct use in the release notes topic: library

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant