Khovanov Homology: Difference between revisions
From Knot Atlas
Jump to navigationJump to search
No edit summary |
Drorbn-pda (talk | contribs) mNo edit summary |
||
Line 1: | Line 1: | ||
{{Manual TOC Sidebar}} |
{{Manual TOC Sidebar}} |
||
The Khovanov Homology <math>\operatorname{\it KH}(L)</math> of a knot or a link <math>L</math>, also known as Khovanov's categorification of the Jones polynomial of <math>L</math>, was defined by Khovanov in {{ref|Khovanov1}} (also check {{ref|Bar-Natan1}}), where the notation is closer to the notation used here). It is a graded homology theory; each homology group <math>\operatorname{\it KH}^r(L)</math> is in itself a direct sum <math>\bigoplus_j\operatorname{\it KH}^r_j(L)</math> of homogeneous components. Over a field on can form the two-variable "Poincar'e polynomial" <math>\operatorname{\it Kh}(L)</math> (which deserves the name "the Khovanov polynomial of |
The Khovanov Homology <math>\operatorname{\it KH}(L)</math> of a knot or a link <math>L</math>, also known as Khovanov's categorification of the Jones polynomial of <math>L</math>, was defined by Khovanov in {{ref|Khovanov1}} (also check {{ref|Bar-Natan1}}), where the notation is closer to the notation used here). It is a graded homology theory; each homology group <math>\operatorname{\it KH}^r(L)</math> is in itself a direct sum <math>\bigoplus_j\operatorname{\it KH}^r_j(L)</math> of homogeneous components. Over a field on can form the two-variable "Poincar'e polynomial" <math>\operatorname{\it Kh}(L)</math> (which deserves the name "the Khovanov polynomial of L"), |
||
<center><math>\operatorname{\it Kh}(L)(q,t) := \sum_{r,j}t^rq^j\dim\operatorname{\it KH}^r_j(L)</math>.</center> |
<center><math>\operatorname{\it Kh}(L)(q,t) := \sum_{r,j}t^rq^j\dim\operatorname{\it KH}^r_j(L)</math>.</center> |
||
Line 23: | Line 23: | ||
in = <nowiki>kh = Kh[Knot[5, 1]][q, t]</nowiki> | |
in = <nowiki>kh = Kh[Knot[5, 1]][q, t]</nowiki> | |
||
out= <nowiki> -5 -3 1 1 1 1 |
out= <nowiki> -5 -3 1 1 1 1 |
||
q + q</nowiki> |
|||
q + q + ------ + ------ + ------ + ----- |
|||
15 5 11 4 11 3 7 2 |
|||
q t q t q t q t</nowiki>}} |
|||
<!--END--> |
|||
The Euler characteristic of the Khovanov Homology <math>\operatorname{\it KH}(L)</math> is (up to normalization) the Jones polynomial <math>J(L)</math> of <math>L</math>. Precisely, |
|||
<center><math>\operatorname{\it Kh}(L)(q, -1) = {\hat J}(L)(q) := (q+q^{-1})J(L)(q^2)</math>.</center> |
|||
Let us verify this in the case of [[5_1]]: |
|||
<!--$${kh /. t -> -1, Expand[(q+1/q)Jones[Knot[5, 1]][q^2]]}$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 4 | |
|||
in = <nowiki>{kh /. t -> -1, Expand[(q+1/q)Jones[Knot[5, 1]][q^2]]}</nowiki> | |
|||
out= <nowiki> -15 -7 -5 -3 -15 -7 -5 -3 |
|||
{-q + q + q + q , -q + q + q + q }</nowiki>}} |
|||
<!--END--> |
|||
{{Knot Image Pair|5_1|gif|10_132|gif}} |
|||
Khovanov's homology is a strictly stronger invariant than the Jones polynomial. Indeed, <math>J(5_1)=J(10_{132})</math> though <math>\operatorname{\it Kh}(5_1)\neq\operatorname{\it Kh}(10_{132})</math>: |
|||
<!--$${ |
|||
Jones[Knot[5, 1]] === Jones[Knot[10, 132]], |
|||
Kh[Knot[5, 1]] === Kh[Knot[10, 132]] |
|||
}$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 5 | |
|||
in = <nowiki>{ |
|||
Jones[Knot[5, 1]] === Jones[Knot[10, 132]], |
|||
Kh[Knot[5, 1]] === Kh[Knot[10, 132]] |
|||
}</nowiki> | |
|||
out= <nowiki>{True, False}</nowiki>}} |
|||
<!--END--> |
|||
The algorithm presently used by <code>KnotTheory`</code> is an efficient algorithm modeled on the Kauffman bracket algorithm of [[The_Jones_Polynomial#How_is_the_Jones_polynomial_computed.3F|The Jones Polynomial]], as explained in {{ref|Bar-Natan3}} (which follows {{ref|Bar-Natan2}}). Currently, two implementations of this algorithm are available: |
|||
* <tt>FastKh</tt>: My original implementation, written in Mathematica in the winter of 2005. This implementation can be explicitly invoked using the syntax <code>Kh[L, Program -> "FastKh"][q, t]</code> or by changing the default behaviour of <code>Kh</code> by evaluating <code>SetOptions[Kh, Program -> "FastKh"]</code>. |
|||
* <tt>JavaKh</tt>: 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 <code>Kh[L, Program -> "JavaKh"][q, t]</code>. |
|||
<!--$$Options[Kh]$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 6 | |
|||
in = <nowiki>Options[Kh]</nowiki> | |
|||
out= <nowiki>{ExpansionOrder -> Automatic, Program -> JavaKh, Modulus -> 0, |
|||
JavaOptions -> }</nowiki>}} |
|||
<!--END--> |
|||
<tt>JavaKh</tt> takes an additional option, <code>Modulus</code>, which sets the characteristic of the ground field for the homology computations to <math>0</math> or to a prime <math>p</math>. Thus for example, the following four <tt>In</tt> lines imply that the Khovanov homology of the torus knot [[T(6,5)]] has both 3 torsion and 5 torsion, but no 7 torsion: |
|||
<!--$$T65 = TorusKnot[6, 5]; kh = Kh[T65][q, t];$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{In| |
|||
n = 7 | |
|||
in = <nowiki>T65 = TorusKnot[6, 5]; kh = Kh[T65][q, t];</nowiki>}} |
|||
<!--END--> |
|||
<!--$(* Cheat: *) |
|||
Kh[TorusKnot[6, 5], Modulus->3] = Function @@ { |
|||
kh + q^43*t^13 + q^43*t^14 /. {q->#1, t->#2} |
|||
}; |
|||
Kh[TorusKnot[6, 5], Modulus->5] = Function @@ { |
|||
kh + q^35*t^10 + q^35*t^11 + q^39*t^11 + q^39*t^12 /. {q->#1, t->#2} |
|||
}; |
|||
Kh[TorusKnot[6, 5], Modulus->7] = Function @@ {kh /. {q->#1, t->#2}}; |
|||
$--><!--END--> |
|||
<!--$$Kh[T65, Modulus -> 3][q, t] - kh$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 8 | |
|||
in = <nowiki>Kh[T65, Modulus -> 3][q, t] - kh</nowiki> | |
|||
out= <nowiki> 43 13 43 14 |
|||
q t + q t</nowiki>}} |
|||
<!--END--> |
|||
<!--$$Kh[T65, Modulus -> 5][q, t] - kh$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 9 | |
|||
in = <nowiki>Kh[T65, Modulus -> 5][q, t] - kh</nowiki> | |
|||
out= <nowiki> 35 10 35 11 39 11 39 12 |
|||
q t + q t + q t + q t</nowiki>}} |
|||
<!--END--> |
|||
<!--$$Kh[T65, Modulus -> 7][q, t] - kh$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 10 | |
|||
in = <nowiki>Kh[T65, Modulus -> 7][q, t] - kh</nowiki> | |
|||
out= <nowiki>0</nowiki>}} |
|||
<!--END--> |
|||
{{Knot Image|T(6,5)|jpg}} |
|||
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: |
|||
<!--$$?JavaOptions$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{HelpLine| |
|||
n = 11 | |
|||
in = <nowiki>JavaOptions</nowiki> | |
|||
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--> |
|||
<!--$$SetOptions[Kh, JavaOptions -> "-Xmx256m"];$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{In| |
|||
n = 12 | |
|||
in = <nowiki>SetOptions[Kh, JavaOptions -> "-Xmx256m"];</nowiki>}} |
|||
<!--END--> |
|||
<!--$(* Cheat: *) |
|||
Kh[TorusKnot[8, 7]] = Function @@ { |
|||
( |
|||
q^41 + q^43 + q^45*t^2 + q^49*t^3 + q^47*t^4 + q^49*t^4 + q^51*t^5 + |
|||
q^53*t^5 + q^49*t^6 + q^51*t^6 + q^53*t^7 + q^55*t^7 + q^51*t^8 + |
|||
2*q^53*t^8 + q^55*t^9 + 2*q^57*t^9 + q^53*t^10 + 2*q^55*t^10 + |
|||
q^57*t^11 + 3*q^59*t^11 + q^55*t^12 + 3*q^57*t^12 + q^59*t^12 + |
|||
q^63*t^12 + q^59*t^13 + 4*q^61*t^13 + q^63*t^13 + 2*q^59*t^14 + |
|||
q^61*t^14 + q^65*t^14 + 4*q^63*t^15 + 2*q^65*t^15 + 2*q^61*t^16 + |
|||
2*q^63*t^16 + 2*q^67*t^16 + q^69*t^16 + 3*q^65*t^17 + 3*q^67*t^17 + |
|||
q^63*t^18 + 2*q^65*t^18 + q^69*t^18 + q^71*t^18 + 2*q^67*t^19 + |
|||
3*q^69*t^19 + q^65*t^20 + 2*q^67*t^20 + q^71*t^20 + q^73*t^20 + |
|||
q^69*t^21 + 3*q^71*t^21 + q^69*t^22 + q^75*t^22 + 2*q^73*t^23 + |
|||
q^71*t^24 + q^73*t^24 + q^77*t^24 + q^75*t^25 + q^77*t^25 |
|||
) /. {q->#1, t->#2} |
|||
}; |
|||
$--><!--END--> |
|||
<!--$$T87 = TorusKnot[8, 7]; kh = Kh[T87][q, t];$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{In| |
|||
n = 13 | |
|||
in = <nowiki>T87 = TorusKnot[8, 7]; kh = Kh[T87][q, t];</nowiki>}} |
|||
<!--END--> |
|||
<!--$(* Cheat: *) |
|||
Kh[TorusKnot[8, 7], Modulus->3] = Function @@ { |
|||
kh + q^79*t^25 + q^79*t^26 /. {q->#1, t->#2} |
|||
}; |
|||
Kh[TorusKnot[8, 7], Modulus->5] = Function @@ { |
|||
kh + ( |
|||
q^61*t^11 + q^61*t^12 + q^73*t^21 + q^73*t^22 + q^75*t^23 + |
|||
q^75*t^24 + q^79*t^24 + q^79*t^25 |
|||
) /. {q->#1, t->#2} |
|||
}; |
|||
Kh[TorusKnot[8, 7], Modulus->7] = Function @@ { |
|||
kh + ( |
|||
q^61*t^14 + q^61*t^15 + q^69*t^20 + q^69*t^21 + q^73*t^21 + |
|||
q^71*t^22 + q^73*t^22 + q^71*t^23 + q^75*t^23 + q^75*t^24 |
|||
) /. {q->#1, t->#2} |
|||
}; |
|||
Kh[TorusKnot[8, 7], Modulus->11] = Function @@ {kh /. {q->#1, t->#2}}; |
|||
$--><!--END--> |
|||
<!--$$Factor[Kh[T87, Modulus -> 3][q, t] - kh]$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 14 | |
|||
in = <nowiki>Factor[Kh[T87, Modulus -> 3][q, t] - kh]</nowiki> | |
|||
out= <nowiki> 79 25 |
|||
q t (1 + t)</nowiki>}} |
|||
<!--END--> |
|||
<!--$$Factor[Kh[T87, Modulus -> 5][q, t] - kh]$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 15 | |
|||
in = <nowiki>Factor[Kh[T87, Modulus -> 5][q, t] - kh]</nowiki> | |
|||
out= <nowiki> 61 11 12 10 14 12 18 13 |
|||
q t (1 + t) (1 + q t + q t + q t )</nowiki>}} |
|||
<!--END--> |
|||
<!--$$Factor[Kh[T87, Modulus -> 7][q, t] - kh]$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 16 | |
|||
in = <nowiki>Factor[Kh[T87, Modulus -> 7][q, t] - kh]</nowiki> | |
|||
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>}} |
|||
<!--END--> |
|||
<!--$$Factor[Kh[T87, Modulus -> 11][q, t] - kh]$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 17 | |
|||
in = <nowiki>Factor[Kh[T87, Modulus -> 11][q, t] - kh]</nowiki> | |
|||
out= <nowiki>0</nowiki>}} |
|||
<!--END--> |
|||
<tt>JavaKh</tt> also works over the integers: |
|||
<!--$$?ZMod$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{HelpLine| |
|||
n = 18 | |
|||
in = <nowiki>ZMod</nowiki> | |
|||
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--> |
|||
For example, the 22nd homology group over <math>{\mathbb Z}</math> of the torus knot T(8,7) at degree 73 is the 280 element torsion group <math>{\mathbb Z}_2\oplus{\mathbb Z}_4\oplus{\mathbb Z}_5\oplus{\mathbb Z}_7</math>: |
|||
<!--$(* Cheat: *) |
|||
Kh[TorusKnot[8, 7], Modulus->Null] = Function @@ { |
|||
q^73*t^22*ZMod[2, 4, 5, 7] /. {q->#1, t->#2} |
|||
}; |
|||
$--><!--END--> |
|||
<!--$$Coefficient[Kh[T87, Modulus -> Null][q, t], t^22 * q^73]$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{InOut| |
|||
n = 19 | |
|||
in = <nowiki>Coefficient[Kh[T87, Modulus -> Null][q, t], t^22 * q^73]</nowiki> | |
|||
out= <nowiki>ZMod[2, 4, 5, 7]</nowiki>}} |
|||
<!--END--> |
|||
T(8,7) is currently not on the Knot Atlas. Let us see what it looks like: |
|||
<!--$$Show[TubePlot[TorusKnot[8, 7]]]$$--> |
|||
<!--Robot Land, no human edits to "END"--> |
|||
{{Graphics| |
|||
n = 20 | |
|||
in = <nowiki>Show[TubePlot[TorusKnot[8, 7]]]</nowiki> | |
|||
img= Khovanov_Homology_Out_20.gif | |
|||
out= <nowiki>-Graphics3D-</nowiki>}} |
|||
<!--END--> |
|||
Finally, <tt>JavaKh</tt> 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 <tt>java JavaKh -help</tt> for some further help). |
|||
[[Image:Mikhail_Khovanov.jpg|thumb|320px|right|August 2002, Toronto: Mikhail Khovanov explaining his more recent paper {{ref|Khovanov2}}.]] |
|||
{{note|Bar-Natan1}} D. Bar-Natan, [http://www.math.toronto.edu/~drorbn/papers/Categorification/ ''On Khovanov's categorification of the Jones polynomial''], Algebraic and Geometric Topology '''2-16''' (2002) 337-370, {{arXiv|math.GT/0201043}}. |
|||
{{note|Bar-Natan2}} D. Bar-Natan, [http://www.math.toronto.edu/~drorbn/papers/Cobordism/ ''Khovanov's Homology for Tangles and Cobordisms''], Geometry and Topology '''9-33''' (2005) 1443-1499, {{arXiv|math.GT/0410495}}. |
|||
{{note|Bar-Natan3}} D. Bar-Natan, [http://www.math.toronto.edu/~drorbn/Talks/GWU-050213/index.html ''I've Computed Kh(T(9,5)) and I'm Happy''], talk given at Knots in Washington XX, George Washington University, February 2005. |
|||
{{note|Khovanov1}} M. Khovanov, ''A categorification of the Jones polynomial'', {{arXiv|math.QA/9908171}}. |
|||
{{note|Khovanov2}} M. Khovanov, ''An invariant of tangle cobordisms'', {{arXiv|math.QA/0207264}}. |
|||
See also [[A Khovanov homology bibliography]]. |
Revision as of 22:01, 10 November 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:
{{InOut| n = 3 | in = kh = Kh[Knot[5, 1]][q, t] | out= -5 -3 1 1 1 1 q + q