Quite frequently in computational algebra one constructs a set of objects that generate a group under some operation. Generic groups are finite groups that are defined by generators that have implicit relations. In order to use them, one has to provide a function for the multiplication of two elements and one to check equality. If known, the identity object can also be passed in.
Generic groups are used in the class field package for the automorphism groups. A frequent situation is that one knows certain automorphisms (as maps) and would like to get the group generated by them. If the group is reasonably small, this can be done using the functions in this section.
All functions here rely on the group being small enough to allow complete enumeration of all elements.
The main application are situations where multiplication of the actual objects is time consuming so one would like to transfer as much as possible to some abstract finite group.
Mult: Intrinsic Default: '*'
Eq: Intrinsic Default: 'eq'
Id: Any Default:
SetVerbose("GrpGen", n): Maximum: 3
Creates the group G generated by the elements of X. The function assumes that the group is finite. The second return value is a map from G onto a list of elements of G which are of the same type as the elements of X.Since this function will enumerate all group elements, the group cannot be too large.
SetVerbose("GrpGen", n): Maximum: 3
Adds a new generator x to G. If x was already in G, the value false is returned and the other return values are unassigned. Otherwise, the new group and the corresponding map is returned.G has to be a generic group as returned by GenericGroup.
The function applies a version of Dimino's algorithm [But91a] to find all elements of G with as few operations as possible.
Given a generic group G as returned by GenericGroup, find a small set of generators.