What is the most efficient way of storing group information? How does GAP do it?

103 Views Asked by At

What is the most efficient way of storing the information contained in group's Cayley table on a disk? Cayley tables grow with $|G|^2$, and for some orders ($p^k$ for growing $k$) there are just too many of them.

For example, there are $10494213$ groups (up to isomorphism) of order $512$. Assuming we need 2 bytes per element of the Cayley table, storing all groups of order $512$ alone would require 5.5TB of memory!

How does GAP's SmallGroups library circumvent this problem? I tried looking through its source code, but I only found some cryptic lists of integers used to describe the group

SMALL_GROUP_LIB[ 16 ] := [
    149511, 9219, 16905, 279051, 9221, 140301, 2245212, 35922525, 574759519, 513, 520, 139787, 8716, 0
]; 

TL;DR: I am looking for a way to store Cayley table information on disk more efficiently. Anything that can be used to reconstruct the Cayley table in reasonable (say polynomial) time would be of great help.

1

There are 1 best solutions below

0
On BEST ANSWER

The Cayley table is easily recreated (see Derek Holt's comments) once you have generators and a way of representing elements in a unique way.

A group of order $n$ requires at most $\log_2(n)$ generators, though often one can do with fewer.

As for representing elements uniquely, this is obvious if you have a faithful permutation or matrix representation, but these can be of degree $|G|$ in worst case.

What the small groups library in GAP does for solvable groups (most of them) is to use a particular presentation, that is words in generators with a way to bring them into normal forms, called pc presentation.

The numbers you see in the storage then are just a particular way (similar to zip files) of storing the data for such a presentation.