Andrews-Curtis is an MPI based Andrews-Curtis move enumerator that examines potential counterexamples to the Andrews-Curtis Conjecture.
Specifically, given P, a balanced presentation of a group that is a potential counterexample to the Andrews-Curtis Conjecture, the Andrews-Curtis executable attempts to prove the potential counterexample P is or is not an actual counterexample.
The balanced presentation P is fed to the Andrews-Curtis executable as a number of generators a,b... along with an equal number of relators r,s... Given these the Andrews-Curtis executable, using only Andrews-Curtis moves, attempts to prove P is trivial.
If it successfully proves P is trivial, it prints out the proof including all Andrews-Curtis moves. If it can not prove P is trivial, it simply prints P, the original balanced presentation, indicating it is a counterexample to the Andrews-Curtis Conjecture.
Andrews-Curtis has the following dependencies:
- An MPI implementation (Tested with Open MPI version v1.8.1)
- A Boost install (Tested with version 1.55.0) with compiled, multi-threaded versions of the following libraries:
Once the dependencies are installed and the environment is set up to allow their access, one can compile Andrews-Curtis by opening a terminal and entering the following commands:
localhost:~ kdavis$ cd <Andrews-Curtis Root Directory>
localhost:Andrews-Curtis kdavis$ make ac
This compiles the Andrews-Curtis executable ac and places it into the Andrews-Curtis root directory.
As the Andrews-Curtis executable is MPI based, it is started like any other MPI executable
localhost:Andrews-Curtis kdavis$ mpirun ./ac ab aB b
Specifically, the above example is for P a balanced presentation with generators a and b and relators aB and b. (When using ac, the inverse of a relator, b for example, is indicated by using uppercase, in our example B.)
Executing the above example on a single node will result in the following proof:
localhost:Andrews-Curtis kdavis$ mpirun ./ac ab aB b
Process: 0 Thread pool size: 4
Process: 1 Thread pool size: 4
Completed level: 0
Uptime: 0ms
Relators: 2
Balanced_presentations: 1
Average Relator Length: 1.5
Average Balanced presentation Length: 3
Derivation:
(aB, b)
(a, b)
As ac is MPI based, running it on a cluser of nodes is simple. One need only use the standard procedure for your MPI implementation.
If you are interesting in contributing, open an issue, code it up, and make a pull request.
An alternative Andrews-Curtis move enumerator, and motivation for this enumerator, is ACME.
