Dror Bar-Natan: Odds, Ends, Unfinished:

The Manolescu-Ozsvath-Sarkar Complex

This Mathematica notebook contains and lightly documents a program I wrote in the summer of 2006. The program sets up the Manolescu-Ozsvath-Sarkar (MOS) complex and computes its homology, the "Knot Floer Homology". The comploex itself is described in detail in the article arXiv:math.GT/0607691 by Manolescu, Ozsvath and Sarkar.

The program is, as expected, a failure. The complexity of the MOS complex grows like n!, so only the Knot Floer homology of rather small knots can be computed. But thanks to the work of many other authors, the Knot Floer homology is known for all knots with up to 10 crossings and many bigger ones as well. So no new computations are available here. Yet the program is not pointless: I learned by writing it, you may learn by reading and using it, and parts of it are recyclable.

For a little while I plan to maintain, upgrade and update this notebook. Let T3 be the time now, let T2 be the time you downloaded this file and let T1 be the time defined below, in the first line of code. If (T3-T2)>(T2-T1), you should download a new copy from http ://www . math . toronto . edu/~ drorbn/Misc/MOSComplex/MOSComplex . nb (or web-search for the current location).

In[1]:=

T1 = Date[]

Out[1]=

{2006, 8, 5, 8, 40, 49.9473837}

T0, the time stamp on the first version of this document, was {2006,8,1,20,41,33.442125}

Startup

To start, download the package KnotTheory` from The Knot Atlas site, save it on your system, change the path information as suits your system, and start executing this notebook.

In[2]:=

AppendTo[$Path, "C:/drorbn/projects/KnotTheory/svn/trunk"] ;

<< KnotTheory`

Loading KnotTheory` version of July 31, 2006, 9:34:35.6875.<br />Read more at http://katlas.math.toronto.edu/wiki/KnotTheory.

Producing Planar Grid Diagrams

First some definitions:

In[4]:=

InterlacedQ[{a_, b_}, {c_, d_}] := (Signature[{a, b}] Signature[{c, d}] Signature[{a, b, c, d}] === -1) ;

Options[PlanarGridDiagram] = {Reduce → Infinity} ;

PlanarGridDiagram[K_, opts___Rule] := PlanarGridDiagram[MorseLink[K], opts] ;

General :: spell1 : Possible spelling error: new symbol name \"InterlacedQ\" is similar to existing symbol \"Interlaced\".  More…

General :: spell1 : Possible spelling error: new symbol name \"out\" is similar to existing symbol \"Out\".  More…

General :: spell1 : Possible spelling error: new symbol name \"red\" is similar to existing symbol \"Red\".  More…

Let's compute the planar grid diagram of the trefoil knot:

In[9]:=

PlanarGridDiagram[Knot[3, 1]]

KnotTheory :: loading : Loading precomputed data in PD4Knots` .

KnotTheory :: credits : MorseLink was added to KnotTheory` by Siddarth Sankaran at the University of Toronto in the summer of 2005.

Out[9]=

PlanarGridDiagram[{5, 2}, {1, 3}, {2, 4}, {3, 5}, {4, 1}]

Each pair above describes one horizontal line in the planar grid diagram, with the first element being the position of the white dot on that line and the second element the position of the black dot.

Drawing Planar Grid Diagrams

Definitions and then examples, no need for words.

In[10]:=

Options[Draw] = {OverlayMatrix → Null} ;

In[12]:=

Show[Draw[PlanarGridDiagram[Knot[3, 1]]]]

[Graphics:HTMLFiles/index_22.gif]

Out[12]=

-Graphics -

The converter program PlanarGridDiagram applies some simplification rules to the result it gets. It is amusing to watch that happen:

In[13]:=

MillettUnknot = PD[X[1, 10, 2, 11], X[9, 2, 10, 3], X[3, 7, 4, 6], X[15, 5, 16, 4], X[5, 17, 6, 16], X[7, 14, 8, 15], X[8, 18, 9, 17], X[11, 18, 12, 19], X[19, 12, 20, 13], X[13, 20, 14, 1]] ;

Show[GraphicsArray[Partition[Table[Draw[PlanarGridDiagram[MillettUnknot, Reduce → k]],  {k, 0, 17} ], 3]]]

[Graphics:HTMLFiles/index_26.gif]

Out[14]=

-GraphicsArray -

The Minesweeper Matrix

The minesweeper matrix of a planar grid diagram is the matrix of winding numbers associated with it. The brilliant terminology is due to Ken Shan.

In[15]:=

MinesweeperMatrix[K_] := MinesweeperMatrix[PlanarGridDiagram[K]] ;

In[17]:=

(t^MinesweeperMatrix[Knot[3, 1]]) // Reverse // MatrixForm

Out[17]//MatrixForm=

( {{1, 1, 1, 1, 1}, {t, t, t, 1, 1}, {t, t, 1, 1/t, 1}, {t, 1, 1/t, 1/t, 1}, {1, 1/t, 1/t, 1/t, 1}} )

In[18]:=

Factor[Det[t^MinesweeperMatrix[Knot[10, 10]]]]

Out[18]=

-((-1 + t)^11 (3 - 11 t + 17 t^2 - 11 t^3 + 3 t^4))/t^7

In[19]:=

Alexander[Knot[10, 10]][t]

Out[19]=

17 + 3/t^2 - 11/t - 11 t + 3 t^2

In[20]:=

SetOptions[Draw, OverlayMatrix → MinesweeperMatrix] ;

Show[GraphicsArray[{Draw[PlanarGridDiagram[Knot["K11n34"]]], Draw[PlanarGridDiagram[Knot["K11n42"]]] }]]

KnotTheory :: loading : Loading precomputed data in DTCode4KnotsTo11` .

KnotTheory :: credits : The GaussCode to PD conversion was written by Siddarth Sankaran at the University of Toronto in the summer of 2005.

[Graphics:HTMLFiles/index_40.gif]

Out[21]=

-GraphicsArray -

Invariance Examples for the Alexander Polynomial

In[22]:=

MOSAlexander[K_] := Factor[Det[t^MinesweeperMatrix[K]]]

In[23]:=

pgd = PlanarGridDiagram[K = Knot["K11n11"]]

Draw[pgd] // Show ;

{MOSAlexander[pgd], Alexander[K][t]}

Out[23]=

PlanarGridDiagram[{12, 2}, {1, 10}, {3, 9}, {5, 11}, {9, 12}, {4, 8}, {2, 5}, {11, 7}, {8, 6}, {7, 4}, {10, 3}, {6, 1}]

[Graphics:HTMLFiles/index_47.gif]

Out[25]=

{(-1 + t)^11 t^2 (1 - 5 t + 13 t^2 - 17 t^3 + 13 t^4 - 5 t^5 + t^6), -17 + 1/t^3 - 5/t^2 + 13/t + 13 t - 5 t^2 + t^3}

Cycling

In[26]:=

pgd1 = RotateLeft[pgd]

Draw[pgd1] // Show ;

MOSAlexander[pgd1]

Out[26]=

PlanarGridDiagram[{1, 10}, {3, 9}, {5, 11}, {9, 12}, {4, 8}, {2, 5}, {11, 7}, {8, 6}, {7, 4}, {10, 3}, {6, 1}, {12, 2}]

[Graphics:HTMLFiles/index_53.gif]

Out[28]=

-(-1 + t)^11 t^12 (1 - 5 t + 13 t^2 - 17 t^3 + 13 t^4 - 5 t^5 + t^6)

Stabilization

In[29]:=

pgd2 = pgd /. {{10, 3} → Sequence[{11, 7}, {7, 3}], j_ /; j≥7 :→ j + 1}

Draw[pgd2] // Show ;

MOSAlexander[pgd2]

Out[29]=

PlanarGridDiagram[{13, 2}, {1, 11}, {3, 10}, {5, 12}, {10, 13}, {4, 9}, {2, 5}, {12, 8}, {9, 6}, {8, 4}, {11, 7}, {7, 3}, {6, 1}]

[Graphics:HTMLFiles/index_59.gif]

Out[31]=

-(-1 + t)^12 t^2 (1 - 5 t + 13 t^2 - 17 t^3 + 13 t^4 - 5 t^5 + t^6)

Commutation

In[32]:=

pgd3 = pgd /.{{9, 12} → {4, 8}, {4, 8} → {9, 12}}

Draw[pgd3] // Show ;

MOSAlexander[pgd3]

Out[32]=

PlanarGridDiagram[{12, 2}, {1, 10}, {3, 9}, {5, 11}, {4, 8}, {9, 12}, {2, 5}, {11, 7}, {8, 6}, {7, 4}, {10, 3}, {6, 1}]

[Graphics:HTMLFiles/index_65.gif]

Out[34]=

-(-1 + t)^11 t^2 (1 - 5 t + 13 t^2 - 17 t^3 + 13 t^4 - 5 t^5 + t^6)

The MOS complex - States and Degrees

In[35]:=

K = TorusKnot[4, 3] ;

Note that from here on the knot K must be fixed. Every time you change it, you must re-execute all the definitions below.

In[36]:=

Show[Draw[PlanarGridDiagram[K]]]

[Graphics:HTMLFiles/index_69.gif]

Out[36]=

-Graphics -

In[37]:=

Clear[pgd, n, MM, a, PP, WW, AlexanderDegreeShift, AlexanderDegree, x0, MaslovDegree, Boundary, AllStates, BoundaryMatrix, Rank, Betti, MOSHomology] ;

pgd = PlanarGridDiagram[K]

Out[38]=

PlanarGridDiagram[{1, 5}, {7, 4}, {6, 3}, {5, 2}, {4, 1}, {3, 7}, {2, 6}]

In[39]:=

n = Length[MM = MinesweeperMatrix[pgd]]

Out[39]=

7

In[40]:=

a[p1_, p2_] := a[p1, p2] = -MM[[p1 /. 0 → n, p2 /. 0 → n]] ;

Out[41]=

-5

In[42]:=

AlexanderDegree[x_State] := AlexanderDegree[x] = AlexanderDegreeShift + Sum[a[k, x[[k]]],  {k, n} ] ;

In[43]:=

AlexanderDegree[State[7, 6, 5, 4, 3, 2, 1]]

Out[43]=

3

In[44]:=

x0 = State @@ RotateLeft[-1 + First /@ List @@ pgd] /. 0 → n

Out[44]=

State[6, 5, 4, 3, 2, 1, 7]

In[45]:=

MaslovDegree[x0] = 1 - n ;

WW[{{i1_, i2_}, {j1_, j2_}}] := WW[{{i1, i2}, {j1, j2}}] = Length[Select[First /@ (List @@ pgd)[[Range[i1 + 1, i2]]],  (j1<#≤j2) &]] ;

PP[s_State, {{i1_, i2_}, {j1_, j2_}}] := Module[ {k, l}, Sum[l = s[[k]] ; If[i1<k<i2, 1, 1/2] * Which[j1<l<j2, 1, j1 == l || j2 == l, 1/2, True, 0],  {k, i1, i2} ] ] ;

In[49]:=

MaslovDegree[State[7, 6, 5, 4, 1, 2, 3]]

Out[49]=

-1

In[50]:=

AllStates[] = (State @@ #) & /@ Permutations[Range[n]] ;

AllStates[m_, a_] := Select[AllStates[], (MaslovDegree[#] == m && AlexanderDegree[#] == a) &] ;

Here are all states with Maslov Degree-5 and Alexander degree 0:

In[52]:=

AllStates[-5, 0]

Out[52]=

The MOS complex - The Differential

In[53]:=

Boundary[expr_] := expr /. x_State :→ Boundary[x] ;

General :: spell1 : Possible spelling error: new symbol name \"cycj\" is similar to existing symbol \"cyci\".  More…

In[55]:=

bndry = Boundary[State[7, 6, 5, 4, 1, 2, 3]]

Out[55]=

State[7, 6, 5, 4, 1, 3, 2] + State[7, 6, 5, 4, 2, 1, 3]

In[56]:=

Boundary[bndry]

Out[56]=

0

In[57]:=

BoundaryMatrix[m_, a_] := Outer[ (Boundary[#2] /. #1 → 1 /. _State → 0) &, AllStates[m - 1, a], AllStates[m, a] ] ;

In[58]:=

BoundaryMatrix[-5, 0] // MatrixForm

Out[58]//MatrixForm=

( {{1, 1, 1, 1, 1, 1, 1}} )

Homological computations

In[59]:=

Rank[m_, a_] := Rank[m, a] = If[ AllStates[m, a] === {} || AllStates[m - 1, a] === {} , 0, MatrixRank[BoundaryMatrix[m, a], Modulus → 2] ] ;

Betti[m_, a_] := Length[AllStates[m, a]] - Rank[m, a] - Rank[m + 1, a] ;

MOSHomology[] := Outer[Betti, Union[MaslovDegree /@ AllStates[]], Union[AlexanderDegree /@ AllStates[]] ] ;

HFK[] := Expand[Factor[Total[Flatten[Outer[ (m^#1 t^#2 Betti[#1, #2]) &, Union[MaslovDegree /@ AllStates[]], Union[AlexanderDegree /@ AllStates[]] ]]] / (1 + 1/(t m))^(n - 1) ]] ;

In[63]:=

Rank[-5, 0]

Out[63]=

1

In[64]:=

Betti[-5, 0]

Out[64]=

0

In[65]:=

Timing[MOSHomology[] // MatrixForm]

Out[65]=

In[66]:=

HFK[]

Out[66]=

1/m^2 + 1/(m^6 t^3) + 1/(m^5 t^2) + t^2/m + t^3


Created by Mathematica  (August 5, 2006) Valid XHTML 1.1!