The Jones Polynomial: Difference between revisions

From Knot Atlas
Jump to navigationJump to search
No edit summary
No edit summary
Line 18: Line 18:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=3}}
{{InOut1|n=3}}
Jones[Knot[6, 1]][q]
<pre style="border: 0px; padding: 0em"><nowiki>Jones[Knot[6, 1]][q]</nowiki></pre>
{{InOut2|n=3}}<pre style="border: 0px; padding: 0em"><nowiki> -4 -3 -2 2 2
{{InOut2|n=3}}<pre style="border: 0px; padding: 0em"><nowiki> -4 -3 -2 2 2
2 + q - q + q - - - q + q
2 + q - q + q - - - q + q
Line 28: Line 28:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=4}}
{{InOut1|n=4}}
Jones[Knot[9, 46]][q]
<pre style="border: 0px; padding: 0em"><nowiki>Jones[Knot[9, 46]][q]</nowiki></pre>
{{InOut2|n=4}}<pre style="border: 0px; padding: 0em"><nowiki> -6 -5 -4 2 -2 1
{{InOut2|n=4}}<pre style="border: 0px; padding: 0em"><nowiki> -6 -5 -4 2 -2 1
2 + q - q + q - -- + q - -
2 + q - q + q - -- + q - -
Line 48: Line 48:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=6}}
{{InOut1|n=6}}
Length /@ {Union[Jones[#][q]& /@ all], all}
<pre style="border: 0px; padding: 0em"><nowiki>Length /@ {Union[Jones[#][q]& /@ all], all}</nowiki></pre>
{{InOut2|n=6}}<pre style="border: 0px; padding: 0em"><nowiki>{2110, 2226}</nowiki></pre>
{{InOut2|n=6}}<pre style="border: 0px; padding: 0em"><nowiki>{2110, 2226}</nowiki></pre>
{{InOut3}}
{{InOut3}}
Line 79: Line 79:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=7}}
{{InOut1|n=7}}
L = PD[Knot[3, 1]]
<pre style="border: 0px; padding: 0em"><nowiki>L = PD[Knot[3, 1]]</nowiki></pre>
{{InOut2|n=7}}<pre style="border: 0px; padding: 0em"><nowiki>PD[X[1, 4, 2, 5], X[3, 6, 4, 1], X[5, 2, 6, 3]]</nowiki></pre>
{{InOut2|n=7}}<pre style="border: 0px; padding: 0em"><nowiki>PD[X[1, 4, 2, 5], X[3, 6, 4, 1], X[5, 2, 6, 3]]</nowiki></pre>
{{InOut3}}
{{InOut3}}
Line 91: Line 91:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=8}}
{{InOut1|n=8}}
t1 = L /. X[a_,b_,c_,d_] :> A P[a,d] P[b,c] + B P[a,b] P[c,d]
<pre style="border: 0px; padding: 0em"><nowiki>t1 = L /. X[a_,b_,c_,d_] :> A P[a,d] P[b,c] + B P[a,b] P[c,d]</nowiki></pre>
{{InOut2|n=8}}<pre style="border: 0px; padding: 0em"><nowiki>PD[A P[1, 5] P[2, 4] + B P[1, 4] P[2, 5], B P[1, 4] P[3, 6] + A P[1, 3] P[4, 6],
{{InOut2|n=8}}<pre style="border: 0px; padding: 0em"><nowiki>PD[A P[1, 5] P[2, 4] + B P[1, 4] P[2, 5], B P[1, 4] P[3, 6] + A P[1, 3] P[4, 6],
Line 101: Line 101:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=9}}
{{InOut1|n=9}}
t2 = Expand[Times @@ t1]
<pre style="border: 0px; padding: 0em"><nowiki>t2 = Expand[Times @@ t1]</nowiki></pre>
{{InOut2|n=9}}<pre style="border: 0px; padding: 0em"><nowiki> 2
{{InOut2|n=9}}<pre style="border: 0px; padding: 0em"><nowiki> 2
A B P[1, 4] P[1, 5] P[2, 4] P[2, 6] P[3, 5] P[3, 6] +
A B P[1, 4] P[1, 5] P[2, 4] P[2, 6] P[3, 5] P[3, 6] +
Line 130: Line 130:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=10}}
{{InOut1|n=10}}
t3 = t2 //. {P[a_,b_]P[b_,c_] :> P[a,c], P[a_,b_]^2 :> P[a,a]}
<pre style="border: 0px; padding: 0em"><nowiki>t3 = t2 //. {P[a_,b_]P[b_,c_] :> P[a,c], P[a_,b_]^2 :> P[a,a]}</nowiki></pre>
{{InOut2|n=10}}<pre style="border: 0px; padding: 0em"><nowiki> 3 2 3 2
{{InOut2|n=10}}<pre style="border: 0px; padding: 0em"><nowiki> 3 2 3 2
B P[1, 1] P[2, 2] P[3, 3] + A B P[2, 2] P[4, 4] + A P[3, 3] P[4, 4] + A B P[3, 3] P[4, 4] +
B P[1, 1] P[2, 2] P[3, 3] + A B P[2, 2] P[4, 4] + A P[3, 3] P[4, 4] + A B P[3, 3] P[4, 4] +
Line 144: Line 144:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=11}}
{{InOut1|n=11}}
t4 = Expand[t3 /. P[a_,a_] -> -A^2-B^2 /. B -> 1/A]
<pre style="border: 0px; padding: 0em"><nowiki>t4 = Expand[t3 /. P[a_,a_] -> -A^2-B^2 /. B -> 1/A]</nowiki></pre>
{{InOut2|n=11}}<pre style="border: 0px; padding: 0em"><nowiki> -9 1 3 7
{{InOut2|n=11}}<pre style="border: 0px; padding: 0em"><nowiki> -9 1 3 7
-A + - + A + A
-A + - + A + A
Line 167: Line 167:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=13}}
{{InOut1|n=13}}
t4 = KB0[PD[Knot[3, 1]]]
<pre style="border: 0px; padding: 0em"><nowiki>t4 = KB0[PD[Knot[3, 1]]]</nowiki></pre>
{{InOut2|n=13}}<pre style="border: 0px; padding: 0em"><nowiki> -9 1 3 7
{{InOut2|n=13}}<pre style="border: 0px; padding: 0em"><nowiki> -9 1 3 7
-A + - + A + A
-A + - + A + A
Line 179: Line 179:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=14}}
{{InOut1|n=14}}
(-A^3)^(-3) * t4 / (-A^2-1/A^2) /. A -> q^(1/4) // Simplify // Expand
<pre style="border: 0px; padding: 0em"><nowiki>(-A^3)^(-3) * t4 / (-A^2-1/A^2) /. A -> q^(1/4) // Simplify // Expand</nowiki></pre>
{{InOut2|n=14}}<pre style="border: 0px; padding: 0em"><nowiki> -4 -3 1
{{InOut2|n=14}}<pre style="border: 0px; padding: 0em"><nowiki> -4 -3 1
-q + q + -
-q + q + -
Line 221: Line 221:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=15}}
{{InOut1|n=15}}
<pre style="border: 0px; padding: 0em"><nowiki>
KB1[pd_PD] := KB1[pd, {}, 1];\n
KB1[pd_PD] := KB1[pd, {}, 1];
KB1[pd_PD, inside_, web_] := Module[\n
KB1[pd_PD, inside_, web_] := Module[
{pos = First[Ordering[Length[Complement[List @@ #, inside]]& /@ pd]]},\n
{pos = First[Ordering[Length[Complement[List @@ #, inside]]& /@ pd]]},
pd[[pos]] /. X[a_,b_,c_,d_] :> KB1[\n
pd[[pos]] /. X[a_,b_,c_,d_] :> KB1[
Delete[pd, pos],\n
Delete[pd, pos],
Union[inside, {a,b,c,d}],\n
Union[inside, {a,b,c,d}],
Expand[web*(A P[a,d] P[b,c]+1/A P[a,b] P[c,d])] //. {\n
Expand[web*(A P[a,d] P[b,c]+1/A P[a,b] P[c,d])] //. {
P[e_,f_]P[f_,g_] :> P[e,g], P[e_,_]^2 :> P[e,e], P[e_,e_] -> -A^2-1/A^2\n
P[e_,f_]P[f_,g_] :> P[e,g], P[e_,_]^2 :> P[e,e], P[e_,e_] -> -A^2-1/A^2
}\n
}
]\n
]
];\n
];
KB1[PD[],_,web_] := Expand[web]"
KB1[PD[],_,web_] := Expand[web]"</nowiki></pre>
{{InOut2|n=15}}<pre style="border: 0px; padding: 0em"><nowiki>$Failed</nowiki></pre>
{{InOut2|n=15}}<pre style="border: 0px; padding: 0em"><nowiki>$Failed</nowiki></pre>
{{InOut3}}
{{InOut3}}
Line 241: Line 241:
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
<!--The lines to END were generated by WikiSplice: do not edit; see manual.-->
{{InOut1|n=16}}
{{InOut1|n=16}}
Timing[KB1[PD[Link[11, Alternating, 548]]]]
<pre style="border: 0px; padding: 0em"><nowiki>Timing[KB1[PD[Link[11, Alternating, 548]]]]</nowiki></pre>
{{InOut2|n=16}}<pre style="border: 0px; padding: 0em"><nowiki>{0. Second, KB1[PD[X[6, 1, 7, 2], X[2, 5, 3, 6], X[18, 11, 19, 12], X[10, 3, 11, 4],
{{InOut2|n=16}}<pre style="border: 0px; padding: 0em"><nowiki>{0.047 Second, PD[][[First[{}]]]}</nowiki></pre>
X[4, 9, 1, 10], X[14, 7, 15, 8], X[8, 13, 5, 14], X[22, 20, 17, 19], X[16, 22, 13, 21],
X[20, 16, 21, 15], X[12, 17, 9, 18]]]}</nowiki></pre>
{{InOut3}}
{{InOut3}}
<!--END-->
<!--END-->

Revision as of 10:22, 26 August 2005

Template:Todo-launch


(For In[1] see Setup)


In[2]:= ?Jones

Jones[L][q] computes the Jones polynomial of a knot or link L as a function of the variable q.

In Naming and Enumeration we checked that the knots 6_1 and 9_46 have the same Alexander polynomial. Their Jones polynomials are different, though:

In[3]:=
Jones[Knot[6, 1]][q]
Out[3]=
     -4    -3    -2   2        2
2 + q   - q   + q   - - - q + q
                      q
In[4]:=
Jones[Knot[9, 46]][q]
Out[4]=
     -6    -5    -4   2     -2   1
2 + q   - q   + q   - -- + q   - -
                       3         q
                      q

The Jones polynomial attains 2110 values on the 2226 knots and links known to KnotTheory`:

In[5]:=

all = Join[AllKnots[], AllLinks[]];

In[6]:=
Length /@ {Union[Jones[#][q]& /@ all], all}
Out[6]=
{2110, 2226}

How is the Jones polynomial computed?

The Jones polynomial is so simple to compute using Mathematica that it's worthwhile pause and see how this is done, even for readers with limited prior programming experience. First, recall (say from [Kauffman]) the definition of the Jones polynomial using the Kauffman bracket :

here is a commutative variable, , and is the writhe of , the difference where and count the positive () and negative () crossings of respectively.

PD[X[1,4,2,5], X[3,6,4,1], X[5,2,6,3]] and P[1,4] P[1,5] P[2,4] P[2,6] P[3,5] P[3,6]

Just for concreteness, let us start by fixing to be the trefoil knot shown above:

In[7]:=
L = PD[Knot[3, 1]]
Out[7]=
PD[X[1, 4, 2, 5], X[3, 6, 4, 1], X[5, 2, 6, 3]]

Our first task is to perform the replacement on all crossings of . By our conventions (see Planar Diagrams) the edges around a crossing are labeled , , and : . Labeling and in the same way, and , we are lead to the symbolic replacement rule . Let us apply this rule to , switch to a multiplicative notation and expand:

In[8]:=
t1 = L /. X[a_,b_,c_,d_] :> A P[a,d] P[b,c] + B P[a,b] P[c,d]
Out[8]=
PD[A P[1, 5] P[2, 4] + B P[1, 4] P[2, 5], B P[1, 4] P[3, 6] + A P[1, 3] P[4, 6], 
 
  A P[2, 6] P[3, 5] + B P[2, 5] P[3, 6]]
In[9]:=
t2 = Expand[Times @@ t1]
Out[9]=
 2
A  B P[1, 4] P[1, 5] P[2, 4] P[2, 6] P[3, 5] P[3, 6] + 
 
     2        2
  A B  P[1, 4]  P[2, 5] P[2, 6] P[3, 5] P[3, 6] + 
 
     2                                        2    3        2        2        2
  A B  P[1, 4] P[1, 5] P[2, 4] P[2, 5] P[3, 6]  + B  P[1, 4]  P[2, 5]  P[3, 6]  + 
 
   3
  A  P[1, 3] P[1, 5] P[2, 4] P[2, 6] P[3, 5] P[4, 6] + 
 
   2
  A  B P[1, 3] P[1, 4] P[2, 5] P[2, 6] P[3, 5] P[4, 6] + 
 
   2
  A  B P[1, 3] P[1, 5] P[2, 4] P[2, 5] P[3, 6] P[4, 6] + 
 
     2                        2
  A B  P[1, 3] P[1, 4] P[2, 5]  P[3, 6] P[4, 6]

In the above expression the product P[1,4] P[1,5] P[2,4] P[2,6] P[3,5] P[3,6] represents a path in which 1 is connected to 4, 1 is connected to 5, 2 is connected to 4, etc. (see the right half of the figure above). We simplify such paths by repeatedly applying the rules and :

In[10]:=
t3 = t2 //. {P[a_,b_]P[b_,c_] :> P[a,c], P[a_,b_]^2 :> P[a,a]}
Out[10]=
 3                              2                    3                      2
B  P[1, 1] P[2, 2] P[3, 3] + A B  P[2, 2] P[4, 4] + A  P[3, 3] P[4, 4] + A B  P[3, 3] P[4, 4] + 
 
     2                2
  3 A  B P[5, 5] + A B  P[1, 1] P[5, 5]

To complete the computation of the Kauffman bracket, all that remains is to replace closed cycles (paths of the form by , to replace by , and to simplify:

In[11]:=
t4 = Expand[t3 /. P[a_,a_] -> -A^2-B^2 /. B -> 1/A]
Out[11]=
  -9   1    3    7
-A   + - + A  + A
       A

We could have, of course, combined the above four lines to a single very short program, that compues the Kauffman bracket from the beginning to the end:

In[12]:=

KB0[pd_] := Expand[

 Expand[Times @@ pd /. X[a_,b_,c_,d_] :> A P[a,d] P[b,c] + 1/A P[a,b] P[c,d]]
   //. {P[a_,b_]P[b_,c_] :> P[a,c], P[a_,b_]^2 :> P[a,a], P[a_,a_] -> -A^2-1/A^2}]
In[13]:=
t4 = KB0[PD[Knot[3, 1]]]
Out[13]=
  -9   1    3    7
-A   + - + A  + A
       A

We will skip the uninteresting code for the computation of the writhe here; it is a linear time computation, and if that's all we ever wanted to compute, we wouldn't have bothered to purchase a computer. For our the result is , and hence the Jones polynomial of is given by

In[14]:=
(-A^3)^(-3) * t4 / (-A^2-1/A^2) /. A -> q^(1/4) // Simplify // Expand
Out[14]=
  -4    -3   1
-q   + q   + -
             q

\begin{figure} \htmlimage{} \centering{

 \includegraphics[height=3cm]{figs/L11a548.eps}

} \caption{

 The link \hlink{../Links/11a548.html}{L11a548}.

} \end{figure}

%<* InOut@"Timing[KB0[PD[Link[11, Alternating, 548]]]]"; *>

At merely 3 lines of code, our program is surely nice and elegant. But at <* time1=Out[0]1,1 *> seconds for an 11 crossing link, it is very slow:

<* InOut[0] *> \vskip 6pt

Here's the much faster alternative employed by {\tt KnotTheory`}:

In[15]:=
 
KB1[pd_PD] := KB1[pd, {}, 1];
KB1[pd_PD, inside_, web_] := Module[
  {pos = First[Ordering[Length[Complement[List @@ #, inside]]& /@ pd]]},
  pd[[pos]] /.  X[a_,b_,c_,d_] :> KB1[
    Delete[pd, pos],
    Union[inside, {a,b,c,d}],
    Expand[web*(A P[a,d] P[b,c]+1/A P[a,b] P[c,d])] //. {
      P[e_,f_]P[f_,g_] :> P[e,g], P[e_,_]^2 :> P[e,e], P[e_,e_] -> -A^2-1/A^2
    }
  ]
];
KB1[PD[],_,web_] := Expand[web]"
Out[15]=
$Failed
In[16]:=
Timing[KB1[PD[Link[11, Alternating, 548]]]]
Out[16]=
{0.047 Second, PD[][[First[{}]]]}

(So on the link \hlink{../Links/11a548.html}{L11a548} \verb"KB1" is $<*time1*>/<*time2=Out[0]1,1*>\sim<*Round[time1/time2]*>$ times faster than \verb"KB0".)

The idea here is to maintain a ``computation front, a planar domain which starts empty and gradualy increases until the whole link diagram is enclosed. Within the front, the rules defining the Kauffman bracket, Equation~\eqref{eq:KBDef}, are applied and the result is expanded as much as possible. Outside of the front the link diagram remains untouched. At every step we choose a crossing outside the front with the most legs inside and ``conquer it --- apply the rules of~\eqref{eq:KBDef} and expand again. As our new outpost is maximally connected to our old territory, the length of the boundary is increased in a minimal way, and hence the size of the ``web within our front remains as small as possible and thus quick to manipulate.

In further detail, the routine \verb"KB1[pd, inside, web]" computes the Kauffman bracket assuming the labels of the edges inside the front are in the variable {\tt inside}, the already-computed inside of the front is in the variable {\tt web} and the part of the link diagram yet untouched is {\tt pd}. The single argument \verb"KB1[pd]" simply calls \verb"KB1[pd, inside, web]" with an empty {\tt inside} and with {\tt web} set to 1. The three argument \verb"KB1[pd, inside, web]" finds the position of the crossing maximmally connected to the front using the somewhat cryptic assignment

\begin{verbatim}

 pos = First[Ordering[Length[Complement[List @@ #, inside]]& /@ pd]]}

\end{verbatim}

\noindent \verb"KB1[pd, inside, web]" then recursively calls itself with that crossing removed from {\tt pd}, with its legs added to the {\tt inside}, and with {\tt web} updated in accordance with~\eqref{eq:KBDef}. Finally, when {\tt pd} is empty, the output is simply the value of {\tt web}.

[Kauffman] ^  L. H. Kauffman, On knots, Princeton Univ. Press, Princeton, 1987.