title: [Implementation of the Kauffman Polynomial in SageMath],
title: [Implementation of the \ Kauffman Polynomial in Python],
page-title: [Implementation of the Kauffman Polynomial in Python],
authors: (
(
name: "Antonio De Lucreziis",
@ -150,9 +151,9 @@
],
)
= Introduction
#pagebreak()
Actually we don't like Python so we will be using Rust and then write bindings for Python that can be used in SageMath.
= Introduction
== The Kauffman Polynomial
@ -174,6 +175,8 @@ The defining axioms of the Kauffman polynomial are the following, given a link d
We will later be seeing that the Kauffman polynomial can be defined in a more explicit way, using a recursive definition that is the one we will be using to derive our algorithm.
#pagebreak()
= Computational Knot Theory
The first problem in computational knot theory is to find a good representation for knots and links. There are various common representations in the literature, such as:
@ -295,19 +298,22 @@ $
epsilon(#skein-generic(direction: (+1, -1))) = -1
$
*Algorithm*:
#pagebreak()
*Algorithm*: The input is an oriented link diagram with starting points on each component and the output is a list of components where each component is a list of pairs of numbers
1. Label each crossing with a number in order
2. For each component:
1. Walk along it from the starting point in its orientation
2. At each crossing with label $i$, write a tuple with components
- $+i$ or $-i$ if this is an over-crossing or under-crossing
- $+1$ or $-1$ if this is a left-handed or right-handed
```
Input: An oriented link diagram with starting points on each component
Output: List<List<(Int, Int)>>
- Label each crossing with a number in order
- For each component:
- Walk along it from the starting point in its orientation
- At each crossing, write a tuple with components
- +i or -i if this is an over-crossing or under-crossing
- +1 or -1 if this is a left-handed or right-handed
```
Converting one code to the other is not too much work as one just need to first do a labelling step to convert crossing labels and then convert the over/under-strand and left/right-handedness relations between the two notations.
@ -579,8 +585,6 @@ So PD codes are simpler and compact to store (and generate from a diagram) but S
// ),
// $
#pagebreak()
== Link reconstruction from code
We briefly mention that reconstructing a link from a PD or SG code is not trivial and there are various approaches used by various softwares that can be used for this task.
@ -616,6 +620,8 @@ Another approach used by #link("https://knotfol.io/")[KnotFolio] is based on #li
This condition that every point is the average of its neighbors can be easily expressed as a system of linear equations where some points on a chosen outer face have been fixed. When the graph is planar and 3-vertex-connected the linear system is non degenerate and has a unique solution.
#pagebreak()
= Computing the Polynomial
Let's now recap the main formal algorithm for computing the Kauffman polynomial.