This page is (or soon will be...) a repository for code, mostly written in python (for use with SnapPy (snappy.computop.org)) and Perl (which invokes some of the programs embedded in Knotscape (https://www.math.utk.edu/~morwen/knotscape.html), to study the information that can be gathered about unknotting numbers of low crossing-number knots, using crossing-adjacency, that is, by changing a single crossing in the diagram of a knot. This code is in support of the paper "A counterexample to the Bernhard-Jablan unknotting conjecture" (to appear shortly on the arXiv); it was a key tool in discovering the first counterexamples. I am making the code available so that anyone who is interested in carrying out their own explorations (and sharing the information you learn, thereby, with me!) can at least use this code as a starting point.
There are basically two types of code here:
The first is intended to help build initial databases of putative unknotting numbers, by implementing the Bernhard-Jablan procedure to (at least implicitly) construct an unknotting sequence for every knot through a particular upper bound on crossing number. (That bound is currently 14, since this is the number of crossings for which SnapPy can be used to identify every knot.) We give the python and Perl code used to create these databases. Essentially, they will build and identify the knot underlying every diagram with the chosen number N of crossings (up to flypes), and then, from data from the Bernhard-Jablan procedure for the knots with less than N crossings, run the Bernhard-Jablan procedure to build the data for N-crossing knots. We also give the data that our runs have produced, sliced up in various ways.
This data can be found in the database directory; the readme files describe what each zip archive contains.
The second is random search software for SnapPy (and eventually(?) for Knotscape) which uses the databases, from the first type of code above, to make crossing changes and infer information about the unknotting number of a knot from the unknotting information of the adjacent knots.
This code can be found in the search directory. Basically, start SnapPy, cd into the directory you have put the two files in, and run "execfile('name_of_runfile')".
A third type of code, which I will post to this page when I have cleaned up and assembled all of the pieces, is the code which takes the databases, together with knowledge of upper and lower bounds for unknotting numbers of knots through 12 crossings (to be found on the Knotinfo site, http://www.indiana.edu/~knotinfo/) to apply the Bernhard-Jablan procedure to find upper bounds for the unknotting numbers of the 13- and 14-crossing knots. This data is incorporated into the "initialdatayymmdd.txt" files used in the search software.
There are various caveats that of course go along with this code, the first of which is that it routinely crashes! No, that's not right, it merely slows down to an imperceptible crawl... There are some things that the code asks SnapPy to do that SnapPy occasionally simply gets upset at doing. One of these, from highly-verbose versions that I have run, is to compute a presentation for a knot group; my best guess is that occasionally this encourages SnapPy to deal with so many relators at once (when it simplifies the presentation) that it grinds to a halt. It have also tried to trap most of the more expected errors that SnapPy can throw off (e.g., computing a hyperbolic structure for a non-hyperbolic knot), to limit the crashing, and these again are written off to an error file. The Perl code that invokes Knotscape would slow to a crawl so often that I wrote a timeout routine that kills all calls to 'knotfind' (which then writes an error to a file, so you know that it happened). You should be aware that this will kill *all* running instances of knotfind, however, which might make your friends unhappy. Most of these errors, when running the random searches, I considered the cost of doing business, and ignored, but when you are trying to run an exhaustive search, in order to build a database, missing even a single case renders the whole exercise pointless, and so these errors need to be investigated and re-run.
The idea is that this page will also serve as a repository of results, so that the databases of best-known upper and lower bounds for unknotting number, built into the code, can be periodically updated. So if you find yourself drawn to running some of this code yourself, and manage to generate new and interesting data, please do send it along to me, at mbrittenham2atmathdotunldotedu, and I will see to its inclusion! Since the expansion of the database to include 13- and 14-crossing knots is fairly recent, and there was no prior database on unknotting number for me to raid, like what the website Knotinfo http://www.indiana.edu/~knotinfo/ could provide for knots to 12 crossings, there are a lot of holes in the data for 13- and 14-crossing knots, waiting to be filled!