MAT1750: Khovanov Homology

Charlene Chu - December 6, 2017

Problem

Challenge: Implement Khovanov Homology as it is defined in the handout. Your implementation should fit in one page and should be good enough to show that Kh((Subscript[5, 1]))≠ Kh((Subscript[10, 132])).

Solution

Please note that the core of this source code is from Dror’s lecture (http://www.math.toronto.edu/drorbn/classes/17-1750-ShamelessMathematica/NB-1204.html). The function Kh[K] returns the the vertices and edges for the Khovanov Homology of a knot K. We can use the edges to construct a graph, as seen in the examples. To show Kh((Subscript[5, 1]))≠ Kh((Subscript[10, 132])), we will compare the number of vertices and edges of  Kh[K51]. and Kh[K10132].

Kh[K_]:=Module[{VerticesAndEdges,Vertices,Edges},SetAttributes[{B,P}, Orderless]; t=0; ϵ /: (ϵ^(p_))/;p>1:=0;
VerticesAndEdges=(List@@(Expand[
Times@@(K /. X[i_,j_,k_,l_] :> (++t; P[i,j]P[k,l]+B[t] P[i,l]P[j,k]+ϵ S[t]X[i,j,k,l]))
] //. B[i__]B[j__]:> B[i,j] /.P[a_,b_] :> P[a,b][Min[a,b]]//. P[a_,b_][m1_]P[b_,c_][m2_] :> P[a,c][Min[m1,m2]] /. {P[i_, i_][m_] :> c[m], ((P[_,_][m_])^2):> c[m]})) /.{
(B[b__] S[s_] X[i_,j_,k_,l_] P[i_,l_][m1_] P[k_,j_][m2_]:> {B[b] c[Min[m1,m2]],B[b,s] c[m1] c[m2]}), (S[s_] X[i_,j_,k_,l_] P[l_,k_][m1_] P[j_,i_][m2_] :> {c[m2] c[m1], B[s] c[Min[m1,m2]]})
} /. {ϵ fr_,ϵ to_}:> ϵ(fr->to);
Vertices = Select[VerticesAndEdges,!MemberQ[#,ϵ]&];
Edges=Select[VerticesAndEdges,MemberQ[#,ϵ]& ]/.ϵ:>1;
{Vertices,Edges}]

Examples

We will look at the following knots: the Trefoil Knot (Subscript[3, 1]), the Cinquefoil Knot (Subscript[5, 1]), and the knot (Subscript[10, 132]).

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

Here, we can see the Kh[K] returns a list of two list, the first being a list of vertices and the second being a list of edges.

KhTrefoil=Kh[K31]

We can use this information to graph the vertices and edges.

Graph[KhTrefoil[[2]],VertexLabels->"Name"]

The graphs of  Kh[K51] and Kh[K10132] are too large to display nicely in this document, so we will just compare the vertices and edges to show that Kh((Subscript[5, 1]))≠ Kh((Subscript[10, 132])).

Length[#]&/@Kh[K51]

Length[#]&/@Kh[K10132]

We can see that the Khovanov Homology of the Cinquefoil Knot (Subscript[5, 1]) has a different number of vertices and edges from the knot (Subscript[10, 132]). Therefore, we can conclude that Kh((Subscript[5, 1]))≠ Kh((Subscript[10, 132])).