Index more selection criteria - #69
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #69 +/- ##
==========================================
+ Coverage 99.84% 99.87% +0.02%
==========================================
Files 493 502 +9
Lines 327377 338190 +10813
==========================================
+ Hits 326861 337758 +10897
+ Misses 516 432 -84
🚀 New features to boost your workflow:
|
ThomasBreuer
left a comment
There was a problem hiding this comment.
This is impressive.
In order to find where the available information is stored, the code of SmallGroupsInformation shows the source of the precomputed data, and one can access them much easier than before.
The new text in CHANGES.md is irritating.
There is the statement that SmallGroupsInformation lists the functions for which precomputed information is available.
For example, IsSupersolvableGroup information is not available for the group orders 1152, 1536, and 1920.
However, the first sentence of the text lists IsSupersolvable as one of the functions for which the selection is now cheaper for these orders.
|
Thanks for the additions. |
|
We've added the "missing" indices for |
`SelectSmallGroups` constructed every group of an order whenever that
order had no property data in the library files:
AllSmallGroups(1920, IsSolvableGroup, false); # 241004 groups
AllSmallGroups(512, RankPGroup, 2); # 10494213 groups
IdsOfAllSmallGroups([1 .. 2000], IsSupersolvableGroup, false);
# 412 million groups
For most such orders the value follows from where a group sits.
`SMALL_GROUPS_PROPERTIES_FUNCS` lets a layer say what it knows and the
generic selection function uses it, so a selection using only indexed
criteria constructs nothing. What the layers contribute:
* prime power orders are nilpotent, hence supersolvable and solvable;
squarefree orders are supersolvable and only the cyclic one nilpotent;
cubefree orders are solvable unless they have a direct factor
PSL(2,p), and there nilpotent and abelian coincide, every Sylow
subgroup having order p or p^2.
* an order q^n * p with p occurring once is sorted by normal Sylow
subgroups: solvable by Burnside, nilpotent first, supersolvable
exactly with a normal Sylow p-subgroup, or a normal Sylow q-subgroup
and q = 1 mod p, the irreducible F_q[C_p]-modules being 1-dimensional
then. Its nilpotent groups are those of order q^n times C_p in the
same order, so the abelian ones keep their places -- which settles
`IsAbelian` for 768, 1152, 1536 and 1920, where searching would have
meant up to 10494213 groups.
* the ranks and p-classes of order 512 move from
SMALL_GROUPS_INFORMATION[ 18 ] into SMALL_GROUPS_512_TYPES, now shared
between the two; those of p^4 and p^5 come from the formulas the
information functions already used.
* what no ordering yields was found once by brute force and stored: the
abelian groups of order 512, the ranks and p-classes of 5^6, 7^6, 3^7
and 5^7, and the 13010 groups of order 1152 which are not
supersolvable. tst/verify-indices.g checks these against the groups.
Sets of group numbers become lists of runs, [ 1, [ 5 .. 8 ], 12 ]. The
four helpers layer 8 kept to itself become SMALL_IDS_EXPAND, _UNION,
_INTERSECTION and _DIFFERENCE, with SMALL_IDS_FROM_LIBRARY for the form
the data files use.
A criterion now means the same for every order: `IsSolvable` and its
kind are replaced by the properties they stand for, one admitting both
`true` and `false` is dropped, and a property asked for a non-boolean is
an error.
Two fixes on the way. Selection by `LGLength` missed the groups having
none, the library storing `false` where the attribute returns `fail`. A
given list of group numbers was ignored when every criterion was
indexed, so `IdsOfAllSmallGroups(96, [1, 2, 3], IsAbelian, true)`
returned all abelian groups of order 96.
Closes #4. Indexing `IsSupersolvableGroup` was Thomas Breuer's
suggestion there.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
215a173 to
a5b695d
Compare
SelectSmallGroups, and with itAllSmallGroups,OneSmallGroupandIdsOfAllSmallGroups, constructed every group of an order whenever that order had no property data in the library files. Sobuilt all 241004 groups of order 1920, although only the last 588 of them are the ones asked for, and
was hopeless at 10494213 groups.
For most such orders the value of a criterion follows from the position a group has in the library. Add a hook,
SMALL_GROUPS_PROPERTIES_FUNCS, in which a layer declares what it knows, and let the generic selection function use it, so that a selection using only indexed criteria constructs no group at all. What the layers contribute:orders of prime power order are nilpotent, hence supersolvable and solvable; those of squarefree order are supersolvable, and only the cyclic one among them is nilpotent; those of cubefree order are solvable unless they have a direct factor PSL(2,p), and their nilpotent and abelian groups coincide, as every Sylow subgroup has order p or p^2; and the orders involving at most two primes are solvable by Burnside, with the nilpotent groups coming first.
the ranks and p-classes of the groups of order 512 move from SMALL_GROUPS_INFORMATION[ 18 ] into SMALL_GROUPS_512_TYPES, which the selection functions and the information function now share; the ranks of the orders p^4 and p^5 come from the formulas the corresponding information functions already used.
for the orders 5^6, 7^6, 3^7 and 5^7, and for the abelian groups of order 512, nothing was recorded that could be propagated, and the numbers cannot be described independently of p. These were determined once by brute force and are stored in SMALLGRP_P6_INDEX, SMALLGRP_P7_INDEX and SMALL_GROUPS_PROPERTIES_FUNCS[ 18 ]; tst/verify-indices.g checks them against the groups themselves.
Sets of group numbers, which the data files describe by marking the end of a run of consecutive numbers with a negative entry, are described by ranges from here on, as in [ [ 1 .. 3 ], 5, [ 8 .. 11 ] ]. The four local helpers layer 8 used for them become the globals SMALL_IDS_EXPAND, SMALL_IDS_UNION, SMALL_IDS_INTERSECTION and SMALL_IDS_DIFFERENCE, and SMALL_IDS_FROM_LIBRARY translates the description used in the files.
SelectSmallGroupsnow also preprocesses its query, so that every order treats a criterion alike:IsSolvable,IsNilpotentandIsSupersolvableare replaced by the properties they stand for, a criterion admitting bothtrueandfalseis dropped, and a property asked for a value which is not a boolean is consistently an error.Along the way, fix
IdsOfAllSmallGroupsto honour a given list of group numbers also when every criterion is answered from the property data;IdsOfAllSmallGroups(96, [1, 2, 3], IsAbelian, true)used to ignore the list and return the ids of all abelian groups of order 96.Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Closes #4