One of the things I do most often in the computer algebra software GAP is call for subgroups, and in particular, maximal subgroups of a classical group. There is work in progress (John Bray, Derek Holt, Colva Roney-Dougal) to have the maximal subgroups of low-dimensional classical groups available in GAP and Magma, but for the moment, there is a neat way to have access to these subgroups using the atlasrep package (developed by Robert Wilson, Richard Parker, Simon Nickerson, John Bray, Thomas Breuer).
In short, the atlasrep package allows the user to access permutation and matrix representations of almost simple groups that are in the online Atlas of Finite Group Representations. I often need a one-line command to get the maximal subgroups of a group that is in the ‘atlas’, and so I’ve fashioned my own little function, and I thought I should share it:
AtlasMaximalSubgroups := function( name ) local tocs, gapname, numbers, maxs; if AtlasOfGroupRepresentationsInfo.remote = true then tocs := AtlasTableOfContents( "remote" ).TableOfContents; else tocs := AtlasTableOfContents( "local" ).TableOfContents; fi; gapname := First( AtlasOfGroupRepresentationsInfo.GAPnames, pair -> pair = name ); gapname := gapname; numbers := List(tocs!.(gapname)!.maxes, t -> t); maxs := List(numbers, t -> AtlasSubgroup(name, t)); return maxs; end;
To use it, here is an example for PSp(6,2) (which is called “S6(2)” in the ‘atlas’ world), which GAP will struggle to do without using atlasrep:
gap> LoadPackage("atlasrep"); gap> group := AtlasGroup( "S6(2)" ); gap> maximals := AtlasMaximalSubgroups( "S6(2)" ); gap> Index(group, maximals);