Pensieve Header: The universal Khovanov homology program described in UQAM, http://www.math.toronto.edu/drorbn/Talks/UQAM-051001/index.html

Date: Tue, 27 Sep 2011 17:24:30 -0400 (EDT)
From: Dror Bar-Natan <drorbn@math.toronto.edu>
To: Scott Morrison <...>
Cc: Joshua Batson <...>
Subject: Re: formatting for UniversalKh


Double Hmmm,

Scary how little I remember. Anyway, you did remind me that I gave a talk about
this once in UQAM, so I looked up my own handout and it came with a mathematica
package, so now I more or less remember.

The handout is at
http://www.math.toronto.edu/drorbn/Talks/UQAM-051001/4Tu-2.pdf. According to
the “The work of Green” box at the bottom right (“work of Green” refers to the
programming, not the math; the math is by Naot/DBN), the universal invariant is
a komplex with objects formal arcs at various degrees (q^d) and homological
heights (t^r), and with morphisms formal matrices of “curtains” with a number
of handles (h^g) on each.

At the time I also wrote a short mathematica notebook to interpret the output
of Green’s program. I’ve just edited it a tiny bit and re-posted it at
http://katlas.math.toronto.edu/drorbn/AcademicPensieve/2005-10/. Reading that
notebook you can get a hint for how to interpret the JavaKh output.

It seems that JavaKh only outputs the morphisms of the komplex; this is fair,
because morphisms by definition carry the data on their domain and target
objects. It seems that q^d*t^r*h^g*M[m,n,cs] stands roughly for:

  An m by n matrix of curtains with g handles with domain objects at
  degree d and height r; the entries of the matrix are given as a list of
  coefficients cs which still needs to be partitioned into rows.

What I wrote above is approximate; the precise thing is readable from the
notebook and examples cited above.

Best,

Dror.

On Tue, 27 Sep 2011, Joshua Batson wrote:

> Hello Dror,
>
> I’m writing about universal mode in JavaKh. I’d like to compute the
> universal homology with F_2 coefficients, and scott recommended asking you
> for advice on parsing the output. It comes out like this (for the trefoil):
>
> q^-9*t^-3*h^0*M[0, 1] + q^-9*t^-3*h^1*M[1, 1, 1] + q^-9*t^-3*h^2*M[1, 1, 0]
> + q^-7*t^-3*h^0*M[1, 1, 0] + q^-7*t^-3*h^1*M[1, 1, 1] + q^-7*t^-2*h^0*M[0,
> 1] + q^-5*t^-2*h^0*M[0, 1] + q^-3*t^0*h^0*M[0, 1] + q^-1*t^0*h^0*M[0, 1]
>
> I’m not sure how to interpret the h and M[-,-,-] parts, and scott doesn’t
> remember either. We’re hoping that you do.
>
> Thanks,
>
> -Josh

$Path= $Path~Join~{"C:/drorbn/projects/KAtlas/"};
<< KnotTheory`
KhN[L_] := KhN[PD[L]];
KhN[pd_PD] := Module[
{n, dir, f, cl, out},
n=Max @@ (Max @@@ pd);
pd1 = pd /. {
X[n, i_, 1, j_] :> X[n, i, n+1, j],
X[i_, 1, j_, n] :> X[i, n+1, j, n],
X[1, j_, n, i_] :> X[n+1, j, n, i],
X[j_, n, i_, 1] :> X[j, n, i, n+1]
};
dir=Directory[];
SetDirectory[ToFileName[KnotTheoryDirectory[],"JavaKh"]];
f=OpenWrite["pd",PageWidth->Infinity];
WriteString[f,ToString[pd1]];
Close[f];
cl=StringJoin["!java -Xmx256m JavaKh -H < pd"];
f=OpenRead[cl];
out=Read[f,Expression];
Close[f];
SetDirectory[dir];
out=StringReplace[out,{"q"->"#1","t"->"#2"}];
kh=ToExpression[out<>"&"][q,t];
minr=Exponent[kh, t, Min];
maxr=Exponent[kh, t, Max];
obs = Expand[kh /. h -> 0 /. M[_, n_, ___]  :> Plus @@ Array[Arc, n]];
obs = obs /. (q^j_.)*Arc[i_] :> Arc[j, i] /. Arc[i_] :> Arc[0, i];
mos= Expand[
h*kh /. {M[0,_]-> 0, M[_, 0] -> 0, h-> H}
/. M[m_, n_, cs___] :> Plus @@ Flatten[MapIndexed[
(#1*Curtain@@Reverse[#2])&,
Partition[{cs}, n],
{2}
]]
];
mos = mos /. (q^j_.)*Curtain[k_, l_] :> Curtain[j, k, l] /. Curtain[k_, l_] :> Curtain[0, k, l];
mos = mos /. (H^g_.)*Curtain[j_, k_, l_] :> H^(g-1)Curtain[j, k, j+2(g-1), l];
Komplex @@ Table[{r, Coefficient[obs, t, r],  Coefficient[mos, t, r]}, {r, minr, maxr}]
]

KhN[Knot[3, 1]]

Print /@ KhN[Knot[13, NonAlternating, 3663]];

KhN[TorusKnot[6,5]]