This introduction is divided into two parts: First, we are going to give some mathematical background before introducing the software itself.
Racks and Quandles were first described by John Conway and Gavin Wraith in 1959 in unpublished correspondence. In , David Joyce showed that racks are indeed a knot invariant. Subsequently, Fenn and Rourke introduced racks as proper knot invariants in . It is instructive to consider racks as groups without their multiplicative elements. Formally, a rack is defined as a set of elements endowed with a binary operation which satisfies the following axioms (where the third axiom holds only for a quandle, not for a rack) for all a, b, c in the rack/quandle R:
Biracks and Biquandles are defined similarly, now with two operations, satisfying the following axioms:
In addition, both operations satisfy the rack axiom 1.
Here, the up and down actions allow us to introduce a switch map via fa(x) = xa, fa(x) = xa as S(a, fa(b)) = S(b, fb(a)). The utility of this is clear when one observes that the axioms can be reformulated using the switch map:
This reformulation is more amenable to computational work.
The homology of the biquandle is defined as follows:
Let X be a birack. Thenbe the free abelian group generated by n-tuples (x1x2… xn), xi ∈ X, that is, .
We define a boundary homomorphism by:
andis called a chain complex of X.
Furthermore, we have a subchain complex, generated by degenerate n-tuples (x1x2…xn), xi ∈ X with xi = xi+1 for some i. Together with the boundary homomorphism, is is called the degenerate chain complex of X.
Using both of those chain complexes, we can define the biquandle chain complex via the quotient chain complex,. This gives the following short exact sequence of chain complexes:
We can then define the birack, biquandle and degenerate homology groups in the usual way. In addition, we have the following long exact sequence of homology groups:
The algorithm for the homology calculation is described in  for this specific software.
The software, which is provided as an R package, can be accessed on github. It provides two primary functions. One of these calculates the homology of racks and biracks, whilst the other verifies if a rack or birack is induced by a given set with one or two actions.
This software is implemented in R. It has been tested on MacOS X, CentOS/Ubuntu and Windows without any problems.
The algorithm for the homology calculation is described in the paper .
The program is divided into the following two main parts: The calculation of the boundary matrix and the subsequent calculation of the Homology. For a graphical description see the following Figure 1, which was created with the following code:
The boundary matrices are computed using the functions boundary_matrix (for quandle and rack boundary matrices) and boundary_matrix_degenerate (for degenerate boundary matrices), respectively. The methodology of both functions is similar, differing only in the manner in which degenerate or non-degenerate entries are removed where required. In particular, after creating a right-sized matrix, they call boundary_names or boundary-names_degenerate to create the row and column names of the boundary matrix. After this, they loop through the column names to calculate their boundaries and construct the matrix (for details see ). These boundary matrices represent the boundary maps of the simplicial complex of the rack/birack.
After both boundary matrices have been calculated, they are returned to the homology and degenerate_homology functions, respectively. As is the case for the boundary matrices functions, these two functions only differ in the boundary functions called and in their respective output texts.
As an aside, those two functions should be the only ones that would have to be called by the user in order to calculate a homology.
Following on with the algorithm described in , those two functions calculate the image and kernel of the boundary map representations (the boundary matrices) before finding a representation of the homology group. For this, they call various functions, namely findX, which “finds X” (this is defined in ), row_space, which calculates a basis of the row space of a matrix, matrix_rank, which calculates the rank of a matrix and GaussianElimination, a function written by Prof John Fox (see  for a source) which does a Gaussian Elimination on a matrix and returns its reduced row echelon form.
Using the function smith, the smith natural form is obtained from the representation matrix of the homology. This is done via repeated calculation of the hermite normal form of the matrix and its transpose, using the hermiteNF function from the numbers package, . In addition, this function checks if the diagonal of the matrix is in the correct form via the function check_more_push and, if required, will call push_down to do what the name implies.
Finally. The homology group is obtained using the diagonal of the smith normal form.
The second function of this package, the testing if a give operation or operations give rise to a quandle or biquandle is done via the function S_test. This function receives as input the order of the underlying set and then proceeds to test the two requirements for a quandle/biquandle as described before.
The results of the program have been compared to known results and in addition, R CMD check has been used to quality check the code itself.
Additionally, a few tests have been provided in test/testthat.R.
Any OS that can install and run R (at least version 3.0.0).
The more RAM, the higher the homology groups that can be calculated.
Presently, output is on screen, but can be changed to a file, if necessary.
Required input devices: keyboard only.
Licence: GNU GPL v3.0
Publisher: Ansgar Wenzel
Date published: 02/05/2016
Licence: GNU GPL v3.0
Publisher: Ansgar Wenzel
Date published: 04/01/2017
License: GNU GPL v3.0
Date published: 05/05/2016
Support is currently provided via Github issues.
This software can be used to calculate the homology groups of most racks and biracks. It is very easy to adapt for application to other eracks/biracks. Furthermore we believe that it can easily be extended to the calculation of Cohomology groups. Finally, the possibility of quickly identifying if a given action/set of actions gives rise to a rack/birack, is very useful.
We would like to thank all contributors and developers of the R software, in particular the authors of the packages used in this program as well as of RStudio.
The authors have no competing interests to declare.
Fenn, R 2014 How to calculate Homology. http://www.maths.sussex.ac.uk/Staff/RAF/Maths/.
Joyce, D 1982 A classifying invariant of knots: the knot quandle. Journal of Pure and Applied Algebra 23: 37–65. DOI: https://doi.org/10.1016/0022-4049(82)90077-9
Fox, J 2014 GaussianElimination and rref function. http://socserv.mcmaster.ca/jfox/Courses/R-course-Berkeley/.
R Core Team 2014 R: A language and environment for statistical computing. R Foundation for Statistical Computing. Vienna, Austria. http://www.R-project.org/.
Venables, W N and Ripley, B D 2002 Modern Applied Statistics with S. Fourth Edition. Springer, New York. ISBN 0-387-95457-0. DOI: https://doi.org/10.1007/978-0-387-21706-2
Bates, D and Maechler, M 2014 Matrix: Sparse and Dense Matrix Classes and Methods. R package version 1.1–4. http://CRAN.R-project.org/package=Matrix.
Borchers, H W 2014 numbers: Number-theoretic Functions. R package version 0.4–5, http://CRAN.R-project.org/package=numbers.