Dror Bar-Natan: Papers: Categorification:

Explaining the "Categorification.m" Program

The purpose of this document, written on September 17 2008 along with Jana Archibald, Zsuzsanna Dancso, Iva Halacheva, Louis Leung and Krzysztof Putyra is play around a bit with Dror's old "categorification.m" mathematica program, which computes Khovanov homology. Hopefully, Krzysztof will use this knowledge to produce a program to compute his variant of "odd" Khovanov homology. The original program is available at http://www.math.toronto.edu/~drorbn/papers/Categorification/Categorification.m. It is reproduced here in (mostly) red, with minor modifications to make it compliant with KnotTheory` conventions.

This Mathematica notebook is available at http://www.math.toronto.edu/~drorbn/papers/Categorification/CategorificationProgramExplained.nb.

First, let us load KnotTheory` :

In[1]:=

"CategorificationProgramExplained_1.gif"

"CategorificationProgramExplained_2.gif"

PD conventions are explained at http://katlas.org/wiki/Planar_Diagrams.

In[2]:=

"CategorificationProgramExplained_3.gif"

"CategorificationProgramExplained_4.gif"

Out[2]=

"CategorificationProgramExplained_5.gif"

First, for degree reasons, we need to count the positive and negative crossings in pd :

In[3]:=

"CategorificationProgramExplained_6.gif"

In[5]:=

"CategorificationProgramExplained_7.gif"

"CategorificationProgramExplained_8.gif"

In[6]:=

"CategorificationProgramExplained_9.gif"

Out[6]=

"CategorificationProgramExplained_10.gif"

In[7]:=

"CategorificationProgramExplained_11.gif"

Out[7]=

"CategorificationProgramExplained_12.gif"

Let' s implement the smoothing rules : X[i, j, k, l] -> either p[i, j] p[k, l] or p[i, l] p[j, k] . First. "p" must be "commutative" or ""Orderless":

In[8]:=

"CategorificationProgramExplained_13.gif"

In[9]:=

"CategorificationProgramExplained_14.gif"

In[10]:=

"CategorificationProgramExplained_15.gif"

Out[10]=

"CategorificationProgramExplained_16.gif"

We now go into the definition of "S", which stands for "Smoothing" : it gets an input which is a PD and either a list {0, 0, 1, 0} of zeros and ones or a string "0010".

In[11]:=

"CategorificationProgramExplained_17.gif"

In[12]:=

"CategorificationProgramExplained_18.gif"

Out[12]//FullForm=

"CategorificationProgramExplained_19.gif"

In[13]:=

"CategorificationProgramExplained_20.gif"

Out[13]=

"CategorificationProgramExplained_21.gif"

In[14]:=

"CategorificationProgramExplained_22.gif"

In[15]:=

"CategorificationProgramExplained_23.gif"

Out[15]=

"CategorificationProgramExplained_24.gif"

Constructing the vertices of the Khovanov cube

First, a simple variant:

In[16]:=

"CategorificationProgramExplained_25.gif"

Out[17]=

"CategorificationProgramExplained_26.gif"

In[18]:=

"CategorificationProgramExplained_27.gif"

Out[18]=

"CategorificationProgramExplained_28.gif"

In[19]:=

"CategorificationProgramExplained_29.gif"

Out[19]=

"CategorificationProgramExplained_30.gif"

In[20]:=

"CategorificationProgramExplained_31.gif"

Out[21]=

"CategorificationProgramExplained_32.gif"

In[22]:=

"CategorificationProgramExplained_33.gif"

Out[22]=

"CategorificationProgramExplained_34.gif"

In[23]:=

"CategorificationProgramExplained_35.gif"

Out[23]=

"CategorificationProgramExplained_36.gif"

In[24]:=

"CategorificationProgramExplained_37.gif"

Out[24]=

"CategorificationProgramExplained_38.gif"

In[25]:=

"CategorificationProgramExplained_39.gif"

Out[25]=

"CategorificationProgramExplained_40.gif"

In[26]:=

"CategorificationProgramExplained_41.gif"

Out[26]=

"CategorificationProgramExplained_42.gif"

In[27]:=

"CategorificationProgramExplained_43.gif"

Out[27]=

"CategorificationProgramExplained_44.gif"

So our smoothing has 3 cycles!

In[28]:=

"CategorificationProgramExplained_45.gif"

Out[28]=

"CategorificationProgramExplained_46.gif"

"p[i,j][m]" means "a path from i to j, named m; by convention, a path is named after the minimal edge inside it.

In[29]:=

"CategorificationProgramExplained_47.gif"

In[30]:=

"CategorificationProgramExplained_48.gif"

Out[30]=

"CategorificationProgramExplained_49.gif"

In[31]:=

"CategorificationProgramExplained_50.gif"

Out[32]=

"CategorificationProgramExplained_51.gif"

In[33]:=

"CategorificationProgramExplained_52.gif"

Out[34]=

"CategorificationProgramExplained_53.gif"

In[35]:=

"CategorificationProgramExplained_54.gif"

Out[35]=

"CategorificationProgramExplained_55.gif"

Yet, we want S to also understand "*" s!

In[36]:=

"CategorificationProgramExplained_56.gif"

In[37]:=

"CategorificationProgramExplained_57.gif"

Out[37]=

"CategorificationProgramExplained_58.gif"

In[38]:=

"CategorificationProgramExplained_59.gif"

Out[38]=

"CategorificationProgramExplained_60.gif"

In[39]:=

"CategorificationProgramExplained_61.gif"

In[40]:=

"CategorificationProgramExplained_62.gif"

Out[40]=

"CategorificationProgramExplained_63.gif"

In[41]:=

"CategorificationProgramExplained_64.gif"

Out[41]=

"CategorificationProgramExplained_65.gif"

In[42]:=

"CategorificationProgramExplained_66.gif"

Out[42]=

"CategorificationProgramExplained_67.gif"

In[43]:=

"CategorificationProgramExplained_68.gif"

Out[43]=

"CategorificationProgramExplained_69.gif"

In[44]:=

"CategorificationProgramExplained_70.gif"

Out[44]=

"CategorificationProgramExplained_71.gif"

In[45]:=

"CategorificationProgramExplained_72.gif"

Out[45]=

"CategorificationProgramExplained_73.gif"

In[46]:=

"CategorificationProgramExplained_74.gif"

Out[47]=

"CategorificationProgramExplained_75.gif"

Define the degree of an arbitrary combination of v_ + and v_ - ' s :

In[48]:=

"CategorificationProgramExplained_76.gif"

In[49]:=

"CategorificationProgramExplained_77.gif"

Out[49]=

"CategorificationProgramExplained_78.gif"

In[50]:=

"CategorificationProgramExplained_79.gif"

Out[50]=

"CategorificationProgramExplained_80.gif"

In[51]:=

"CategorificationProgramExplained_81.gif"

Out[51]=

"CategorificationProgramExplained_82.gif"

In[52]:=

"CategorificationProgramExplained_83.gif"

Out[52]=

"CategorificationProgramExplained_84.gif"

In[53]:=

"CategorificationProgramExplained_85.gif"

Out[53]=

"CategorificationProgramExplained_86.gif"

In[54]:=

"CategorificationProgramExplained_87.gif"

Out[54]=

"CategorificationProgramExplained_88.gif"

In[55]:=

"CategorificationProgramExplained_89.gif"

Out[55]=

"CategorificationProgramExplained_90.gif"

V[L, a] is the vector space sitting at a for L, V[L, a, deg] will be the degree deg part of V[L, a]:

In[56]:=

"CategorificationProgramExplained_91.gif"

In[59]:=

"CategorificationProgramExplained_92.gif"

Out[59]=

"CategorificationProgramExplained_93.gif"

In[60]:=

"CategorificationProgramExplained_94.gif"

Out[60]=

"CategorificationProgramExplained_95.gif"

In[61]:=

"CategorificationProgramExplained_96.gif"

Out[61]=

"CategorificationProgramExplained_97.gif"

In[62]:=

"CategorificationProgramExplained_98.gif"

Out[62]=

"CategorificationProgramExplained_99.gif"

In[63]:=

"CategorificationProgramExplained_100.gif"

Out[63]=

"CategorificationProgramExplained_101.gif"

In[64]:=

"CategorificationProgramExplained_102.gif"

Out[64]=

"CategorificationProgramExplained_103.gif"

Defining the edge morphisms :

In[65]:=

"CategorificationProgramExplained_104.gif"

In[67]:=

"CategorificationProgramExplained_105.gif"

Out[67]=

"CategorificationProgramExplained_106.gif"

In[68]:=

"CategorificationProgramExplained_107.gif"

Out[68]=

"CategorificationProgramExplained_108.gif"

In[69]:=

"CategorificationProgramExplained_109.gif"

Out[69]=

"CategorificationProgramExplained_110.gif"

The "column" direct sums :

In[70]:=

"CategorificationProgramExplained_111.gif"

In[72]:=

"CategorificationProgramExplained_112.gif"

Out[72]=

"CategorificationProgramExplained_113.gif"

The differential

In[73]:=

"CategorificationProgramExplained_114.gif"

In[74]:=

"CategorificationProgramExplained_115.gif"

Out[74]=

"CategorificationProgramExplained_116.gif"

In[75]:=

"CategorificationProgramExplained_117.gif"

Out[75]=

"CategorificationProgramExplained_118.gif"

In[76]:=

"CategorificationProgramExplained_119.gif"

Out[76]=

"CategorificationProgramExplained_120.gif"

In[79]:=

"CategorificationProgramExplained_121.gif"

In[81]:=

"CategorificationProgramExplained_122.gif"

"CategorificationProgramExplained_123.gif"

"CategorificationProgramExplained_124.gif"

"CategorificationProgramExplained_125.gif"

"CategorificationProgramExplained_126.gif"

"CategorificationProgramExplained_127.gif"

"CategorificationProgramExplained_128.gif"

"CategorificationProgramExplained_129.gif"

"CategorificationProgramExplained_130.gif"

"CategorificationProgramExplained_131.gif"

"CategorificationProgramExplained_132.gif"

"CategorificationProgramExplained_133.gif"

"CategorificationProgramExplained_134.gif"

Out[81]=

"CategorificationProgramExplained_135.gif"

Spikey Created with Wolfram Mathematica 6