I have a list of 185 knots with less than 15 crossings and I want to check which of them are torus knots. I know there are many invariants being able to exclude some of them being torus, but I was wondering if there is a computable criteria to show that the knot is torus.


Solution 1:

So the answer depends on a lot of things here. Kyle Miller gives some good advice, Regina is an option. But let's delve into the things that will matter in how you go about this. This is a general overview about how to do this for any list.

  1. How are your knots defined? Basically, when you say you have a list of knots, do you have DT code? Gauss code? Something else? Hopefully you do not have literal pictures of diagrams, because then you have to turn that into a usable list of data that can be imported into whatever program you end up using.

  2. How big are the knots? Here, the quickest thing to check is the number of crossings. This will tell you what invariants you should and should not use. Since in your case, are talking about 15 crossing knots - then computing polynomials is a really good way to go. If they are 1200 crossing knots, you will never finish the computation before the Sun expands and consumes the Earth. So other invariants are a better fit.

  3. What programs are you comfortable with? If you have used SnapPy before but never Regina, then don't change now! And vice-versa. But if you have never used either of them, you are basically going to have to pick one. Other options are Mathematica's Knot Theory package, KnotScape, and there are a few others. (If readers have another good options, I would hope they put it in the comments.) Personally, I am most comfortable with SnapPy, so the rest of my comments will focus on that.

  4. In your chosen program, what are the quick/powerful invariants you can compute? If you pick SnapPy, a program that is built to construct hyperbolic structures, and you are looking for torus knots, it is going to not run as smoothly as you might like, since these are literally two separate collections of knots. But SnapPy still has useful invariants to try, like fundamental_group and some polynomials. The command identify might be all you need. But as I mentioned above, if it is a large number of crossings, this won't work. If the fundamental group appearing as $ \langle a, b | a^n=b^m\rangle$ would be all you need, if you are lucky enough to get that. As Kyle mentioned, Regina can detect normal surfaces in your knot exteriors, so is a good option, but SnapPy has some of these built in also.

Here is how I would walk through the process I am sure it could be more efficient and more elegant, but when needing to do a lot of computations, it is sometimes better to just get through it, using SnapPy and running it through Sage so you have the polynomials and verified hyperbolicity.

  1. Enter your knot with DT code or whatever and make a manifold, m

  2. Run m.volume() and if it is not zero (or to be safe, say over 1 allowing for silly rounding and erros), then it is hyperbolic and not a torus knot and we are done with it. If it is 0, then it is probably not hyperbolic and go to step 3. (If you want to be really sure, you can use m.verify_hyperbolicity() for a provable result it is hyperbolic.)

  3. Run m.identify() which hopefully will work, but might not. If not, run m.splitting_surface() which will tell you if it is a satellite knot. Since there are only a handful of satellite knots with 15 or fewer crossings, it is unlikely.

  4. If it then ends up still possibly torus, try the fundamental group and hope for the standard presentation, which verifies it as a torus knot.

  5. If not, then compute a polynomial and check it against a list of all the torus knots polynomials up to 15 crossings. That is only a handful so it should be a quick check.

Hopefully that gets you through the list. Good luck!