diff --git a/main.pdf b/main.pdf index 5c88fc8..6dbfdcd 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.typ b/main.typ index 0759e6b..53a6abb 100644 --- a/main.typ +++ b/main.typ @@ -135,7 +135,8 @@ #show: ams-article.with( paper-size: "a4", - 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> - -- 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. diff --git a/theme.typ b/theme.typ index 6a11304..2a62d81 100644 --- a/theme.typ +++ b/theme.typ @@ -13,6 +13,7 @@ #let ams-article( // The article's title. title: [Paper title], + page-title: [Paper title], // An array of authors. For each author you can specify a name, // department, organization, location, and email. Everything but // but the name is optional. @@ -64,7 +65,7 @@ if i == 1 { return } set text(size: script-size) align(center)[ - #upper(title) + #upper(page-title) ] },