Does there exist any program that lists all the elements of a group given its generators and relations?
MOTIVATION: it would be easier, in general (when solving a problem), than listing all elements by hand.
Does there exist any program that lists all the elements of a group given its generators and relations?
MOTIVATION: it would be easier, in general (when solving a problem), than listing all elements by hand.
Copyright © 2021 JogjaFile Inc.
Theoretically, the answer is "no". However, it is "yes" for all "common" groups, such as finite groups, linear groups, hyperbolic groups...
(By "lists" I mean the program starts writing down elements of the group, but of course it can never stop as the group may be infinite.)
Proof. If the word problem is undecidable then we cannot tell if elements are equal or not, so we cannot write down the list.
On the other hand, suppose we have decidable word problem. Enumerate the elements of the ambient free group $F(\mathbf{x})$. Write down the first element $g_1$. Loop increasing the $i$ as follows: for all $h_j$ already written down, check if $g_ih_j^{-1}=1$ (using the solution to the word problem), and write $g_i$ if $g_ih_j^{-1}\neq1$ for all $h_j$.
If you are looking for a program to run in your computer, then KBMAG (Knuth-Bendix on Monoids, and Automatic Groups) is most likely what you're looking for. From the link: "It is a stand-alone package written in C, for use under UNIX, with an interface to GAP 3 [GAP being the program discussed in the comments].
The overall objective of KBMAG is to construct a normal form for the elements of a finitely presented group G in terms of the given generators, together with a word reduction algorithm for calculating the normal form representation of an element in G, given as a word in the generators. If this can be achieved, then it is also possible to enumerate the words in normal form up to a given length, and to determine the order of the group, by counting the number of words in normal form."
KBMAG will (theoretically) output something nice if you input something nice, else it will essentially keep running.