Khovanov Homology: Difference between revisions
No edit summary |
DrorsRobot (talk | contribs) No edit summary |
||
Line 9: | Line 9: | ||
<!--$$?Kh$$--> |
<!--$$?Kh$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{HelpLine| |
|||
{{Help1|n=1|s=Kh}} |
|||
n = 1 | |
|||
Kh[L][q, t] returns the Poincare polynomial of the Khovanov Homology of a knot/link L (over a field of characteristic 0) in terms of the variables q and t. Kh[L, Program -> prog] uses the program prog to perform the computation. The currently available programs are "FastKh", written in Mathematica by Dror Bar-Natan in the winter of 2005 and "JavaKh" (default), written in java (java 1.5 required!) by Jeremy Green in the summer of 2005. The java program is several thousand times faster than the Mathematica program, though java may not be available on some systems. "JavaKh" also takes the option "Modulus -> p" which changes the characteristic of the ground field to p. If p==0 JavaKh works over the rational numbers; if p==Null JavaKh works over Z (see ?ZMod for the output format). |
|||
in = <nowiki>Kh</nowiki> | |
|||
{{Help2}} |
|||
out= <nowiki>Kh[L][q, t] returns the Poincare polynomial of the Khovanov Homology of a knot/link L (over a field of characteristic 0) in terms of the variables q and t. Kh[L, Program -> prog] uses the program prog to perform the computation. The currently available programs are "FastKh", written in Mathematica by Dror Bar-Natan in the winter of 2005 and "JavaKh" (default), written in java (java 1.5 required!) by Jeremy Green in the summer of 2005. The java program is several thousand times faster than the Mathematica program, though java may not be available on some systems. "JavaKh" also takes the option "Modulus -> p" which changes the characteristic of the ground field to p. If p==0 JavaKh works over the rational numbers; if p==Null JavaKh works over Z (see ?ZMod for the output format).</nowiki>}} |
|||
<!--END--> |
<!--END--> |
||
Line 18: | Line 19: | ||
<!--$$kh = Kh[Knot[5, 1]][q, t]$$--> |
<!--$$kh = Kh[Knot[5, 1]][q, t]$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{InOut| |
||
n = 2 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>kh = Kh[Knot[5, 1]][q, t]</nowiki></pre> |
|||
in = <nowiki>kh = Kh[Knot[5, 1]][q, t]</nowiki> | |
|||
{{InOut2|n=2}}<pre style="border: 0px; padding: 0em"><nowiki> -5 -3 1 1 1 1 |
|||
out= <nowiki> -5 -3 1 1 1 1 |
|||
q + q + ------ + ------ + ------ + ----- |
q + q + ------ + ------ + ------ + ----- |
||
15 5 11 4 11 3 7 2 |
15 5 11 4 11 3 7 2 |
||
q t q t q t q t</nowiki> |
q t q t q t q t</nowiki>}} |
||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
Line 35: | Line 36: | ||
<!--$${kh /. t -> -1, Expand[(q+1/q)Jones[Knot[5, 1]][q^2]]}$$--> |
<!--$${kh /. t -> -1, Expand[(q+1/q)Jones[Knot[5, 1]][q^2]]}$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{InOut| |
||
n = 3 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>{kh /. t -> -1, Expand[(q+1/q)Jones[Knot[5, 1]][q^2]]}</nowiki></pre> |
|||
in = <nowiki>{kh /. t -> -1, Expand[(q+1/q)Jones[Knot[5, 1]][q^2]]}</nowiki> | |
|||
{{InOut2|n=3}}<pre style="border: 0px; padding: 0em"><nowiki> -15 -7 -5 -3 -15 -7 -5 -3 |
|||
out= <nowiki> -15 -7 -5 -3 -15 -7 -5 -3 |
|||
{-q + q + q + q , -q + q + q + q }</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
Line 49: | Line 50: | ||
}$$--> |
}$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{InOut| |
||
n = 4 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>{ |
|||
in = <nowiki>{ |
|||
Jones[Knot[5, 1]] === Jones[Knot[10, 132]], |
Jones[Knot[5, 1]] === Jones[Knot[10, 132]], |
||
Kh[Knot[5, 1]] === Kh[Knot[10, 132]] |
Kh[Knot[5, 1]] === Kh[Knot[10, 132]] |
||
}</nowiki> |
}</nowiki> | |
||
out= <nowiki>{True, False}</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
Line 65: | Line 66: | ||
<!--$$Options[Kh]$$--> |
<!--$$Options[Kh]$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{InOut| |
||
n = 5 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>Options[Kh]</nowiki></pre> |
|||
in = <nowiki>Options[Kh]</nowiki> | |
|||
{{InOut2|n=5}}<pre style="border: 0px; padding: 0em"><nowiki>{ExpansionOrder -> Automatic, Program -> JavaKh, Modulus -> 0, |
|||
out= <nowiki>{ExpansionOrder -> Automatic, Program -> JavaKh, Modulus -> 0, |
|||
JavaOptions -> }</nowiki> |
JavaOptions -> }</nowiki>}} |
||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
Line 77: | Line 78: | ||
<!--$$T65 = TorusKnot[6, 5]; kh = Kh[T65][q, t];$$--> |
<!--$$T65 = TorusKnot[6, 5]; kh = Kh[T65][q, t];$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{In| |
||
n = 6 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>T65 = TorusKnot[6, 5]; kh = Kh[T65][q, t];</nowiki></pre> |
|||
in = <nowiki>T65 = TorusKnot[6, 5]; kh = Kh[T65][q, t];</nowiki>}} |
|||
{{In2}} |
|||
<!--END--> |
<!--END--> |
||
Line 94: | Line 95: | ||
<!--$$Kh[T65, Modulus -> 3][q, t] - kh$$--> |
<!--$$Kh[T65, Modulus -> 3][q, t] - kh$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{InOut| |
||
n = 7 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>Kh[T65, Modulus -> 3][q, t] - kh</nowiki></pre> |
|||
in = <nowiki>Kh[T65, Modulus -> 3][q, t] - kh</nowiki> | |
|||
{{InOut2|n=7}}<pre style="border: 0px; padding: 0em"><nowiki> 43 13 43 14 |
|||
out= <nowiki> 43 13 43 14 |
|||
q t + q t</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
<!--$$Kh[T65, Modulus -> 5][q, t] - kh$$--> |
<!--$$Kh[T65, Modulus -> 5][q, t] - kh$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{InOut| |
||
n = 8 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>Kh[T65, Modulus -> 5][q, t] - kh</nowiki></pre> |
|||
in = <nowiki>Kh[T65, Modulus -> 5][q, t] - kh</nowiki> | |
|||
{{InOut2|n=8}}<pre style="border: 0px; padding: 0em"><nowiki> 35 10 35 11 39 11 39 12 |
|||
out= <nowiki> 35 10 35 11 39 11 39 12 |
|||
q t + q t + q t + q t</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
<!--$$Kh[T65, Modulus -> 7][q, t] - kh$$--> |
<!--$$Kh[T65, Modulus -> 7][q, t] - kh$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{InOut| |
||
n = 9 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>Kh[T65, Modulus -> 7][q, t] - kh</nowiki></pre> |
|||
in = <nowiki>Kh[T65, Modulus -> 7][q, t] - kh</nowiki> | |
|||
{{InOut2|n=9}}<pre style="border: 0px; padding: 0em"><nowiki>0</nowiki></pre> |
|||
out= <nowiki>0</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
Line 122: | Line 123: | ||
<!--$$?JavaOptions$$--> |
<!--$$?JavaOptions$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{HelpLine| |
|||
{{Help1|n=10|s=JavaOptions}} |
|||
n = 10 | |
|||
JavaOptions is an option to Kh. Kh[L, Program -> "JavaKh", JavaOptions -> jopts] calls java with options jopts. Thus for example, JavaOptions -> "-Xmx256m" sets the maximum java heap size to 256MB - useful for large computations. |
|||
in = <nowiki>JavaOptions</nowiki> | |
|||
{{Help2}} |
|||
out= <nowiki>JavaOptions is an option to Kh. Kh[L, Program -> "JavaKh", JavaOptions -> jopts] calls java with options jopts. Thus for example, JavaOptions -> "-Xmx256m" sets the maximum java heap size to 256MB - useful for large computations.</nowiki>}} |
|||
<!--END--> |
<!--END--> |
||
<!--$$SetOptions[Kh, JavaOptions -> "-Xmx256m"];$$--> |
<!--$$SetOptions[Kh, JavaOptions -> "-Xmx256m"];$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{In| |
||
n = 11 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>SetOptions[Kh, JavaOptions -> "-Xmx256m"];</nowiki></pre> |
|||
in = <nowiki>SetOptions[Kh, JavaOptions -> "-Xmx256m"];</nowiki>}} |
|||
{{In2}} |
|||
<!--END--> |
<!--END--> |
||
Line 154: | Line 156: | ||
<!--$$T87 = TorusKnot[8, 7]; kh = Kh[T87][q, t];$$--> |
<!--$$T87 = TorusKnot[8, 7]; kh = Kh[T87][q, t];$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{ |
{{In| |
||
n = 12 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>T87 = TorusKnot[8, 7]; kh = Kh[T87][q, t];</nowiki></pre> |
|||
in = <nowiki>T87 = TorusKnot[8, 7]; kh = Kh[T87][q, t];</nowiki>}} |
|||
{{In2}} |
|||
<!--END--> |
<!--END--> |
||
Line 180: | Line 182: | ||
<!--$$Factor[Kh[T87, Modulus -> 3][q, t] - kh]$$--> |
<!--$$Factor[Kh[T87, Modulus -> 3][q, t] - kh]$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{InOut| |
|||
{{InOut1|n=13}} |
|||
n = 13 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>Factor[Kh[T87, Modulus -> 3][q, t] - kh]</nowiki></pre> |
|||
in = <nowiki>Factor[Kh[T87, Modulus -> 3][q, t] - kh]</nowiki> | |
|||
{{InOut2|n=13}}<pre style="border: 0px; padding: 0em"><nowiki> 79 25 |
|||
out= <nowiki> 79 25 |
|||
q t (1 + t)</nowiki></pre> |
|||
q t (1 + t)</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
<!--$$Factor[Kh[T87, Modulus -> 5][q, t] - kh]$$--> |
<!--$$Factor[Kh[T87, Modulus -> 5][q, t] - kh]$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{InOut| |
|||
{{InOut1|n=14}} |
|||
n = 14 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>Factor[Kh[T87, Modulus -> 5][q, t] - kh]</nowiki></pre> |
|||
in = <nowiki>Factor[Kh[T87, Modulus -> 5][q, t] - kh]</nowiki> | |
|||
{{InOut2|n=14}}<pre style="border: 0px; padding: 0em"><nowiki> 61 11 12 10 14 12 18 13 |
|||
out= <nowiki> 61 11 12 10 14 12 18 13 |
|||
q t (1 + t) (1 + q t + q t + q t )</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
<!--$$Factor[Kh[T87, Modulus -> 7][q, t] - kh]$$--> |
<!--$$Factor[Kh[T87, Modulus -> 7][q, t] - kh]$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{InOut| |
|||
{{InOut1|n=15}} |
|||
n = 15 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>Factor[Kh[T87, Modulus -> 7][q, t] - kh]</nowiki></pre> |
|||
in = <nowiki>Factor[Kh[T87, Modulus -> 7][q, t] - kh]</nowiki> | |
|||
{{InOut2|n=15}}<pre style="border: 0px; padding: 0em"><nowiki> 61 14 8 6 12 7 10 8 14 9 |
|||
out= <nowiki> 61 14 8 6 12 7 10 8 14 9 |
|||
q t (1 + t) (1 + q t + q t + q t + q t )</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
<!--$$Factor[Kh[T87, Modulus -> 11][q, t] - kh]$$--> |
<!--$$Factor[Kh[T87, Modulus -> 11][q, t] - kh]$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{InOut| |
|||
{{InOut1|n=16}} |
|||
n = 16 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>Factor[Kh[T87, Modulus -> 11][q, t] - kh]</nowiki></pre> |
|||
in = <nowiki>Factor[Kh[T87, Modulus -> 11][q, t] - kh]</nowiki> | |
|||
{{InOut2|n=16}}<pre style="border: 0px; padding: 0em"><nowiki>0</nowiki></pre> |
|||
out= <nowiki>0</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
Line 217: | Line 219: | ||
<!--$$?ZMod$$--> |
<!--$$?ZMod$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{HelpLine| |
|||
{{Help1|n=17|s=ZMod}} |
|||
n = 17 | |
|||
ZMod[m] denotes the cyclic group Z/mZ. Thus if m=0 it is the infinite cyclic group Z and if m>0 it is the finite cyclic group with m elements. ZMod[m1, m2, ...] denotes the direct sum of ZMod[m1], ZMod[m2], ... . |
|||
in = <nowiki>ZMod</nowiki> | |
|||
{{Help2}} |
|||
out= <nowiki>ZMod[m] denotes the cyclic group Z/mZ. Thus if m=0 it is the infinite cyclic group Z and if m>0 it is the finite cyclic group with m elements. ZMod[m1, m2, ...] denotes the direct sum of ZMod[m1], ZMod[m2], ... .</nowiki>}} |
|||
<!--END--> |
<!--END--> |
||
Line 231: | Line 234: | ||
<!--$$Coefficient[Kh[T87, Modulus -> Null][q, t], t^22 * q^73]$$--> |
<!--$$Coefficient[Kh[T87, Modulus -> Null][q, t], t^22 * q^73]$$--> |
||
<!--Robot Land, no human edits to "END"--> |
<!--Robot Land, no human edits to "END"--> |
||
{{InOut| |
|||
{{InOut1|n=18}} |
|||
n = 18 | |
|||
<pre style="color: red; border: 0px; padding: 0em"><nowiki>Coefficient[Kh[T87, Modulus -> Null][q, t], t^22 * q^73]</nowiki></pre> |
|||
in = <nowiki>Coefficient[Kh[T87, Modulus -> Null][q, t], t^22 * q^73]</nowiki> | |
|||
out= <nowiki>ZMod[2, 4, 5, 7]</nowiki>}} |
|||
{{InOut3}} |
|||
<!--END--> |
<!--END--> |
||
Revision as of 13:21, 30 August 2005
The Khovanov Homology of a knot or a link , also known as Khovanov's categorification of the Jones polynomial of , was defined by Khovanov in [Khovanov1] (also check [Bar-Natan1]), where the notation is closer to the notation used here). It is a graded homology theory; each homology group is in itself a direct sum of homogeneous components. Over a field on can form the two-variable "Poincar'e polynomial" (which deserves the name "the Khovanov polynomial of $L$"),
(For In[1] see Setup)
|
Thus for example, here's the Khovanov polynomial of the knot 5_1:
In[2]:=
|
kh = Kh[Knot[5, 1]][q, t]
|
Out[2]=
|
-5 -3 1 1 1 1
q + q + ------ + ------ + ------ + -----
15 5 11 4 11 3 7 2
q t q t q t q t
|
The Euler characteristic of the Khovanov Homology is (up to normalization) the Jones polynomial of . Precisely,
Let us verify this in the case of 5_1:
In[3]:=
|
{kh /. t -> -1, Expand[(q+1/q)Jones[Knot[5, 1]][q^2]]}
|
Out[3]=
|
-15 -7 -5 -3 -15 -7 -5 -3
{-q + q + q + q , -q + q + q + q }
|
Khovanov's homology is a strictly stronger invariant than the Jones polynomial. Indeed, though :
In[4]:=
|
{
Jones[Knot[5, 1]] === Jones[Knot[10, 132]],
Kh[Knot[5, 1]] === Kh[Knot[10, 132]]
}
|
Out[4]=
|
{True, False}
|
The algorithm presently used by KnotTheory`
is an efficient algorithm modeled on the Kauffman bracket algorithm of The Jones Polynomial, as explained in [Bar-Natan3] (which follows [Bar-Natan2]). Currently, two implementations of this algorithm are available:
- FastKh: My original implementation, written in Mathematica in the winter of 2005. This implementation can be explicitly invoked using the syntax
Kh[L, Program -> "FastKh"][q, t]
or by changing the default behaviour ofKh
by evaluatingSetOptions[Kh, Program -> "FastKh"]
. - JavaKh: In the summer of 2005 Jeremy Green re-implemented the algorithm in java (java 1.5 required!) with much further care to the details, leading to an improvemnet factor of several thousands for large knots/links. This implementation is the default. It can also be explicitly invoked from within Mathematica using the syntax
Kh[L, Program -> "JavaKh"][q, t]
.
In[5]:=
|
Options[Kh]
|
Out[5]=
|
{ExpansionOrder -> Automatic, Program -> JavaKh, Modulus -> 0,
JavaOptions -> }
|
JavaKh takes an additional option, Modulus
, which sets the characteristic of the ground field for the homology computations to or to a prime . Thus for example, the following four In lines imply that the Khovanov homology of the torus knot T(6,5) has both 3 torsion and 5 torsion, but no 7 torsion:
In[6]:=
|
T65 = TorusKnot[6, 5]; kh = Kh[T65][q, t];
|
In[7]:=
|
Kh[T65, Modulus -> 3][q, t] - kh
|
Out[7]=
|
43 13 43 14
q t + q t
|
In[8]:=
|
Kh[T65, Modulus -> 5][q, t] - kh
|
Out[8]=
|
35 10 35 11 39 11 39 12
q t + q t + q t + q t
|
In[9]:=
|
Kh[T65, Modulus -> 7][q, t] - kh
|
Out[9]=
|
0
|
The following further example is a bit tougher. It takes my computer nearly an hour and some 256Mb of memory to find that the Khovanov homology of the 48-crossing torus knot T(8,7) has 3, 5 and 7 torsion but no 11 torsion:
|
In[11]:=
|
SetOptions[Kh, JavaOptions -> "-Xmx256m"];
|
In[12]:=
|
T87 = TorusKnot[8, 7]; kh = Kh[T87][q, t];
|
In[13]:=
|
Factor[Kh[T87, Modulus -> 3][q, t] - kh]
|
Out[13]=
|
79 25
q t (1 + t)
|
In[14]:=
|
Factor[Kh[T87, Modulus -> 5][q, t] - kh]
|
Out[14]=
|
61 11 12 10 14 12 18 13
q t (1 + t) (1 + q t + q t + q t )
|
In[15]:=
|
Factor[Kh[T87, Modulus -> 7][q, t] - kh]
|
Out[15]=
|
61 14 8 6 12 7 10 8 14 9
q t (1 + t) (1 + q t + q t + q t + q t )
|
In[16]:=
|
Factor[Kh[T87, Modulus -> 11][q, t] - kh]
|
Out[16]=
|
0
|
JavaKh also works over the integers:
|
For example, the 22nd homology group over of the torus knot T(8,7) at degree 73 is the 280 element torsion group :
In[18]:=
|
Coefficient[Kh[T87, Modulus -> Null][q, t], t^22 * q^73]
|
Out[18]=
|
ZMod[2, 4, 5, 7]
|
Finally, JavaKh may also be run outside of Mathematica, as the following example demonstrates:
drorbn@coxeter:.../KnotTheory: cd JavaKh drorbn@coxeter:.../KnotTheory/JavaKh: java JavaKh PD[X[3, 1, 4, 6], X[1, 5, 2, 4], X[5, 3, 6, 2]] "+ q^1t^0 + q^3t^0 + q^5t^2 + q^9t^3 "
(Type java JavaKh -help for some further help).
[Bar-Natan1] ^ D. Bar-Natan, On Khovanov's categorification of the Jones polynomial, Algebraic and Geometric Topology 2-16 (2002) 337-370, arXiv:math.GT/0201043.
[Bar-Natan2] ^ D. Bar-Natan, Khovanov's Homology for Tangles and Cobordisms, Geometry and Topology 9-33 (2005) 1443-1499, arXiv:math.GT/0410495.
[Bar-Natan3] ^ D. Bar-Natan, I've Computed Kh(T(9,5)) and I'm Happy, talk given at Knots in Washington XX, George Washington University, February 2005.
[Khovanov1] ^ M. Khovanov, A categorification of the Jones polynomial, arXiv:math.QA/9908171.
[Khovanov2] ^ M. Khovanov, An invariant of tangle cobordisms, arXiv:math.QA/0207264.