Knots, Braids, and Quandles

I provide Python code for four investigations into knots (circles embedded in 3-space).  The Python code contains many comments and the option of printing comments that describe the steps in the implementation of the algorithms.

To receive the Python code for this topic, use the Contact form to request the zip file and I will e-mail it to you.

The first step in any study of knots and braids is making a decision about notation.  Since there are several alternatives for the knot notation that convey different amounts of information about the knot, this is an important decision.

Second, I was interested in how to compute the braid for any knot.  This study was based primarily on work by Andrew Bartholomew. 

Third, I investigated how to compute the Alexander Polynomial from a braid based on work by Julia Collins. 

Fourth, I was interested in quandles, a relatively new (1982) structure in algebraic topology.  The main basis for this was work by Mohamed Elhamdadi and Sam Nelson.

Knot and Braid Notation

Knot to Braid

Braid to Alexander Polynomial

Knot to Quandle

Knot and Braid Notation

Some input/output Python modules are common to all three programs.  These modules provide you with two methods of input/output (user and file) and the ability to turn on “tracing” to see how the algorithms are working. 

 

Bartholomew Peer Codes

We require knot notation that contains complete crossing information.   Notation such as the Gauss Code and Dowker-Thistlethwaite Notation tell you which knot edges cross and which edge is crossing under or over.  Complete crossing information also tells you if the crossing is right-handed or left-handed.  This complete information is conveyed by Bartholomew's peer code (http://www.layer8.co.uk/maths/) and Livingston's PD notation, which is provided on the KnotInfo website (https://knotinfo.math.indiana.edu).

I use Bartholomew's peer code, and for your convenience I provide a file of peer codes.  Here are sketches of some knots using the peer code.

KnotInfo Braid Words

The braid input format is from KnotInfo (https://knotinfo.math.indiana.edu/),  and for your convenience I provide  a file of braid words from KnotInfo.

Downloads

Download file of peer codes:  Peer Codes (csv file)

Download file of braid words:  Braid Words (csv file)

 
Knot to Braid

The Knot to Braid program is a sequence of Python modules that leads from knot input through Seifert circles, Seifert graph, turning cycles, and Vogel moves to the braid representation of the knot.  The code provides you with the ability to independently investigate Seifert circles, Seifert graphs, and turning cycles for the original knot.  This is a good way to learn about these structures.

 

Python Modules

There are nine Python modules, six specifically for Knot to Braid:

  1.  Braid

  2.  BraidWord

  3.  SeifertCircles 

  4.  SeifertGraph  

  5.  TurningCycles 

  6.  VogelMove

 

Three input/output modules are shared with the other programs:

  1.  CodeTable

  2.  InputKnots

  3.  InputOptions

 

Run Options

 

As illustrated in the diagram, there are four ways to run the modules.

 

Seifert Circles:  If you want to study just the Seifert circles for a knot, run the Seifert Circles module.  Here are some sketches of Seifert circles.

Seifert Graph:  If you want to study how a Seifert graph is derived from the Seifert circles, run the Seifert Graph module.

Turning Cycles:  If you want to study how turning cycles are derived from the Seifert graph, run the Turning cycles module.  Turning cycles are required only when Vogel moves are required.  Here are some sketches of turning cycles.

 

Braid:  To derive the braid for a knot, run the Braid module.  This module controls the iteration through all the modules, performing Vogel moves until a properly reduced Seifert graph is obtained, at which point it uses the BraidWord module to derive the braid.  For the computational creation of the braid word, we must achieve a Seifert graph in which no vertex has order greater than two and no order-2 vertex has adjacent edges that represent crossings of the same type.  This is done by the use of Vogel moves, which are Type II Reidemeister moves on carefully selected edges.  The simplest knot that requires a Vogel move is 5-2.

 

Acknowledgments

My Python code uses ideas and algorithms from Bartholemew (2011), Choi (1995), and Vogel (1990).  I also found great value in reviewing C++ programs kindly provided by Andrew Bartholomew.

References          

                    

Bartholomew, A. (2011). An application of Vogel’s algorithm.  Downloaded from: http://www.layer8.co.uk/maths/download/vogel.pdf

Choi, D. H. (1995).  Algorithm reading off a braid word from Yamada-Vogel construction.  Master’s Thesis, Korea Advanced Institute of Science and Technology.

Vogel, P. (1990). Representation of links by braids:  A new algorithm.  Commentarii Mathematici Helvetici, 65, 104-113.

 
Braid to Alexander Polynomial

 

The Braid to Alexander Polynomial program is a short sequence of Python modules that leads from braid input through Seifert matrix to the Alexander polynomial.  The code provides you with the ability to independently investigate the Seifert matrix.  This is a great way to learn about this interesting structure.

 

Python Modules

There are five Python modules, two specifically for Braid to Alexander Polynomial:

  1.  SeifertMatrix:  Run this module if you want to investigate only the Seifert matrix for a braid.

  2.  Alexander Polynomial:  Run this module for calculating the Alexander polynomial for a braid.

 

You need the Sympy package for both of these modules.  Note that the Alexander Polynomial module is shared with the Knot to Quandle program.

 

Three input/output modules are shared with the other KnotWorks programs:

  1.  CodeTable

  2.  InputBraids

  3.  InputOptions

 

Acknowledgments

My Python code uses ideas and algorithms from Collins (2016).  I also found great value in reviewing a Matlab program kindly provided by Julia Collins.

References

Collins, J. (2016). An algorithm for computing the Seifert matrix of a link from a braid representation.  Ensaios Matemáticos, 30, 246-262.

 
Knot to Quandle

 

A lengthy route to obtaining the Alexander polynomial for a knot is to use the Knot to Braid program (six modules) and then the Braid to Alexander Polynomial program (two modules) from the previous two sections. However, this program (two modules) provides a more direct route using quandles.

 

Python Modules


There are five Python modules, two for Knot to Quandle:

  1.  AlexQuandle:  Run this module to calculate the Alexander quandle.

  2.  AlexPolyomial:  This module contains functions that are called by the AlexQuandle module.

 

You need the Sympy package for these modules.  Note that the Alexander Polynomial module is shared with the Braid to Alexander Polynomial program.

 

Three input/output modules are shared with the other KnotWorks programs:

  1.  CodeTable

  2.  InputKnots

  3.  InputOptions

 

Acknowledgments

The Python code uses ideas from Elhamdadi and Nelson (2015).  This book is an excellent introduction to quandles.

 

References

Elhamdadi, M. and Nelson, S. (2015).  Quandles: An Introduction to the Algebra of Knots.  American Mathematical Society.