Graphs are pretty important objects in mathematics, and in the world — what with every network of any kind being represented by one, from social connections, to road and rail systems, to chemical molecules, to abstract symmetries. They are a fundamental concept in understanding a lot about the world, from particle physics to sociology.

Knots are also pretty important. How can a loop of string get knotted in space? That’s a fairly basic question and you would think we might know the answer to it. But it turns out to be quite hard, and there is a whole field of mathematics devoted to understanding it. Lord Kelvin thought that atoms were knots in the ether. As it turns out, they are not, and there is no ether. Nonetheless the idea was an interesting one and it inspired mathematicians to investigate knots. Knot theory is now a major field of mathematics, part of the subject of topology. It turns out to be deeply connected to many other areas of science, because many things can be knotted: umbilical cords, polymers, quantum observables, DNA… and earphone cords. (Oh yes, earphone cords.) Indeed, knots arise crucially in some of the deepest questions about the nature of space and time, whether as Wilson loops in topological field theories, or as crucial examples in the theory of 3-dimensional spaces, or 3-manifolds, and as basic objects of quantum topology.

Being able to tell apart graphs and knots is, therefore, a pretty basic question. If you’re given two graphs, can you tell if they’re the same? Or if you’re given two knots, can you tell if *they’re* the same? This question is harder than it looks. For instance, the two graphs below look quite different, but they are the “same” (or, to use a technical term, *isomorphic*): each vertex in the first graph corresponds to a vertex in the second graph, in such a way that the connectedness of vertices is preserved.

(Source: Chris-martin on wikipedia)

Telling whether two graphs are the same, or isomorphic, is known as the graph isomorphism problem. It’s a hard problem; when you have very large graphs, it may take a long time to tell whether they are the same or not. As to precisely how hard it is, we don’t yet quite know.

Similarly, two knots, given as diagrams drawn on a page, it is difficult to tell if they are the “same” or not. Two knots are the “same”, or equivalent (or ambient isotopic), if there is a way to move one around in space to arrive at the other. For instance, all three knots shown below are equivalent: they are all, like the knot on the left, unknotted. This is pretty clear for the middle knot; for the knot on the right, have fun trying to see why!

(Source: Stannered, C_S, Prboks13 on wikipedia)

Telling whether two knots are equivalent is also very hard. Indeed, it’s hard enough to tell if a given knot is knotted or knot — which is known as the *unknot recognition* or *unknotting* problem. We also don’t quite know precisely how hard it is.

The fact that we don’t know the answers to some of the most basic questions about graphs and knots is part of the reason why graph theory and knot theory are very active areas of current research!

However, there are some extremely clever methods that can be used to tell graphs and knots apart. Many such methods exist. Some are easier to understand than others; some are easier to implement than others; some tell more knots apart than others. I’m going to tell you about two particular methods, one for graphs, and one for knots. Both methods involve *polynomials*. Both methods are able to tell a lot of graphs/knots apart, but not all of them.

The idea is that, given a graph, you can apply a certain procedure to write down a polynomial. Even if the same graph is presented to you in a different way, you will still obtain the same polynomial. So if you have two graphs, and they give you different polynomials, then they must be different graphs!

Similarly, given a knot, you can apply another procedure to write down a polynomial. Even if the knot is drawn in a very different way (like the very different unknots above), you still obtain the same polynomial. So if you have two knots, and they give you different polynomials, then they must be different knots!

###### Bill Tutte and his polynomial

Bill Tutte was an interesting character: a second world war British cryptanalyst and mathematician, who helped crack the Lorenz cipher used by the Nazi high command, he also made major contributions to graph theory, and developed the field of matroid theory.

He also introduced a way to obtain a polynomial from a graph, which now bears his name: the Tutte polynomial.

Each graph \(G \) has a Tutte polynomial \(T_G \). It’s a polynomial in two variables, which we will call \(x\) and \(y\). So we will write the Tutte polynomial of \(G\) as \(T_G (x,y)\).

For instance, the graph \(G\) below, which forms a triangle, has Tutte polynomial given by \(T_G (x,y) = x^2 + x + y\).

So how do you calculate the Tutte polynomial? There are a few different ways. Probably the easiest is to use a technique where we simplify the graph step by step in the process. We successively collapse or remove edges in various ways, and as we do so, we make some algebra.

There are two operations we perform to simplify the graph. Each of these two operations “removes” an edge, but does so in a different way. They are called *deletion* and *contraction*. You can choose any edge of a graph, and delete it, or contract it, and you’ll end up with a simpler graph.

First, deletion. To delete an edge, you simply rub it out. Everything else stays as it was. The vertices are unchanged: there are still just as many vertices. There is just one fewer edge. So, for instance, the result of deleting an edge of the triangle graph above is shown below.

The graph obtained by deleting edge \(e\) from graph \(G\) is denoted \(G-e\).

Note that in the triangle case above, the triangle graph is connected, and after deleting an edge, the result is still connected. This isn’t always the case: it is possible that you have a connected graph, but after moving an edge \(e\), it becomes disconnected. In this case the edge \(e\) is called a *bridge*. (You can then think of it as a “bridge” between two separate “islands” of the graph; removing the edge, there is no bridge between the islands, so they become disconnected.)

Second, contraction. To contract an edge, you imagine shrinking it down, so that it’s shorter and shorter, until it has no length at all. The edge has vertices at its endpoints, and so these two vertices come together, and combine into a single vertex. So if edge \(e\) has vertices \(v_1, v_2\) at its endpoints, then after contracting \(e\), the vertices \(v_1, v_2\) are combined into a single vertex \(v\). Thus, if we contract an edge of the triangle graph, we obtain a result something like the graph shown below.

The graph obtained by contracting edge \(e\) from graph \(G\) is denoted \(G.e\).

Contracting an edge always produces a graph with 1 fewer edges. Each edge which previous ended at \(v_1\) or \(v_2\) now ends at \(v\). And contracting an edge usually produces a graph with 1 fewer vertices: the vertices \(v_1, v_2\) are collapsed into \(v\).

However, this is not always the case. If the edge \(e\) had both its endpoints at the *same* vertex, then the number of vertices does not decrease at all! The endpoints \(v_1\) and \(v_2\) of \(e\) are then the same point, i.e. \(v_1 = v_2\), and so they are already collapsed into the same vertex! In this case, the edge \(e\) is called a loop. Contracting a loop is the same as just deleting a loop.

So, that’s deletion and contraction. We can use deletion and contraction to calculate the Tutte polynomial using the following rules:

- Let’s start with some really simple graphs.
- If a graph \(G\) has no edges, then it’s just a collection of disconnected vertices. In this case the Tutte polynomial is given by \(T_G (x,y) = 1\).
- If a graph has precisely
*one*edge, then that it consists of a bunch of vertices, with precisely one edge \(e\) joining them. If \(e\) connects two distinct vertices, then it is a bridge, and \(T_G (x,y) = x\). - On the other hand, if \(G\) has precisely one edge \(e\) which connects a vertex to itself, then it is a loop, and \(T_G (x,y) = y\).

- When you take a graph \(G\) and consider deleting an edge \(e\) to obtain \(G – e\), or contracting it to obtain \(G.e\), these three graphs \(G, G-e, G.e\) have Tutte polynomials which are closely related:
\(\displaystyle T_G (x,y) = T_{G-e} (x,y) + T_{G.e} (x,y)\).

So in fact the Tutte polynomial you are looking for is just the

*sum*of the Tutte polynomials of the two simpler graphs \(G-e\) and \(G.e\).

However! This rule only works if \(e\) is*not a bridge or a loop*. If \(e\)*is*a bridge or a loop, then we have two more rules to cover that situation. - When edge \(e\) is a bridge, then \(T_G (x,y) = x T_{G.e} (x,y)\).
- When edge \(e\) is a loop, then \(T_G (x,y) = y T_{G-e} (x,y)\).

These may just look like a random set of rules. And indeed they are: I haven’t tried to explain them, where they come from, or given any motivation for them. And I’m afraid I’m not going to. Tutte was very clever to come up with these rules!

Nonetheless, using the above rules, we can calculate the Tutte polynomial of a graph.

Let’s do some examples. We’ll work out a few, starting with simpler graph and we’ll work our way up to calculating the Tutte polynomial of the triangle, which we’ll denote \(G\).

First, consider the graph \(A\) consisting of a single edge between two vertices.

This graph contains precisely one edge, which is a bridge, so \(T_A (x,y) = x\).

Second, consider the graph \(B\) consisting of a single loop on a single vertex. This graph also contains precisely one edge, but it’s a loop, so \(T_B (x,y) = y\).

Third, consider the graph \(C\) which is just like the graph \(A\), consisting of a single edge between two vertices, but with another disconnected vertex.

This graph also contains precisely one edge, which is also a bridge, so it actually has the same Tutte polynomial as \(A\)! So we have \(T_C (x,y) = x\).

Fourth, consider the graph \(D\) which consists of a loop and another edge as shown. A graph like this is sometimes called a lollipop.

Now let \(e\) be the loop. As it’s a loop, rule 4 applies. If we remove \(e\), then we just obtain the single edge graph \(A\) from before. That is, \(D-e=A\). Applying rule 4, then, we obtain \(T_D (x,y) = y T_{D-e} (x,y) = y T_A (x,y) = xy\).

Fifth, consider the graph \(E\) which consists of two edges joining three vertices. We saw this before when we deleted an edge from the triangle.

Pick one of the edges and call it \(e\). (It doesn’t matter which one — can you see why?) If we remove \(e\), the graph becomes disconnected, so \(e\) is a bridge. Consequently rule 3, for bridges, applies. Now contracting the edge \(e\) we obtain the lollipop graph \(E\). That is, \(E-e=C\). So, applying rule 3, we obtain \(T_E (x,y) = x T_{E-e} (x,y) = x T_C (x,y) = x^2 \).

Sixth, let’s consider the graph \(F\) consisting of two “parallel” edges between two vertices. We saw this graph before when we contracted an edge of the triangle.

Pick one of the edges and call it \(e\). (Again, it doesn’t matter which one.) This edge is neither a bridge nor a loop, so rule 2 applies. Removing \(e\) just gives the graph \(A\) with one vertex, which has Tutte polynomial \(x\). Contracting \(e\) gives a graph with a single vertex and a loop. Applying rule 4, this graph has Tutte polynomial \(y\). So, by rule 2, the Tutte polynomial of this graph \(F\) is given by \(\displaystyle T_F (x,y) = x + y \).

Finally, consider the triangle graph \(G\). Take an edge \(e\); it’s neither a bridge nor a loop, so rule 2 applies. Removing \(e\) results in the graph \(E\) from above, which has Tutte polynomial \(x^2\). Contracting \(e\) results in the graph \(F\) from above with two parallel edges; and we’ve seen it has Tutte polynomial \(x+y\). So, putting it all together, we obtain the Tutte polynomial of the triangle as

\(\displaystyle T_G (x,y) = T_{G-e} (x,y) + T_{G.e} (x,y) = T_E (x,y) + T_F (x,y) = x^2 + x + y.\)

Having seen these examples, hopefully the process starts to make some sense.

However, as we mentioned before, we’ve given no motivation for why this works. And, it’s not even clear that it works at all! If you take a graph, you can delete and contract different edges in different orders and get all sorts of different polynomials along the way. It’s not at all clear that you’ll obtain the same result regardless of how you remove the edges.

Nonetheless, it is true, and was proved by Tutte, that no matter how you simplify the graph at each stage, you’ll obtain the same result. In other word, the Tutte polynomial of a graph is actually well defined.

###### H, O, M, F, L, Y, P and T

Tutte invented his polynomial in the 1940s — it was part of his PhD thesis. So the Tutte polynomial has been around for a long time. The knot polynomial that we’re going to consider, however, is considerably younger.

In the 1980s, there was a revolution in knot theory. The excellent mathematician Vaughan Jones in 1984 discovered a polynomial which can be associated to a knot. It has become known as the Jones polynomial. It was not the first polynomial that anyone had defined from a knot, but it sparked a great deal of interest in knots, and led to the resolution of many previously unknown questions in knot theory.

Once certain ideas are in the air, other ideas follow. Several mathematicians started trying to find improved versions of the Jones polynomial, and at least 8 mathematicians came up with similar ways to improve the Jones polynomial. In 1985, Jim Hoste, Adrian Ocneanu, Kenneth Millett, Peter J. Freyd, W. B. R. Lickorish, and David N. Yetter published a paper defining a new polynomial invariant. Making an acronym of their initials, it’s often called the HOMFLY polynomial. Two more mathematicians, Józef H. Przytycki and Pawe? Traczyk, did independent work on the subject, and so it’s often called the HOMFLY-PT polynomial.

Like the Tutte polynomial, the HOMFLY polynomial is a polynomial in *two* variables. (The Jones polynomial, however, is just in one variable.) It can also be written as a *homogeneous* polynomial in *three* variables. We’ll take the 3-variable homogeneous version.

Strictly speaking, to get a HOMFLY polynomial, your knot must be *oriented*: it must have a direction. This is usually represented by an arrow along the knot.

HOMFLY polynomials also exist for links — a link is just a knot with many loops invovled. So even if there are several loops knotted up, they still have a HOMFLY polynomial. (Each loop needs to be oriented though.)

So, if you’re given an oriented knot or link \(K\), it has a HOMFLY polynomial. We’ll denote it by \(P_K (x,y,z)\). So how do you compute it? By following some rules which successively simplify the knot.

- If the knot \(K\) is the unknot, then \(P_K (x,y,z) = 1\).
- If you take one of the crossings in the diagram and alter it in the various ways shown below — but leave the rest of the knot unchanged — then you obtain three links \(L^+, L^-, L^0\). Their HOMFLY polynomials are related by
\(\displaystyle x P_{L^+} (x,y,z) + y P_{L^-} (x,y,z) + z P_{L^0} (x,y,z) = 0\).

A relationship like this, between three knots or links which differ only at a single crossing, is called a skein relation.

- If you can move the link \(L\) around in 3-dimensional space to another link \(L’\), then this doesn’t change the HOMFLY polynomial: $latex P_L (x,y,z) = P_{L’} (x,y,z).
- If the oriented link \(L\) is
*split*, i.e. separates into two disjoint (untangled) sub-links \(L_1, L_2\), then you can take the HOMFLY polynomials of the two pieces separately, and multiply them, with an extra factor:\(\displaystyle P_L (x,y,z) = \frac{-(x+y)}{z} P_{L_1} (x,y,z) P_{L_2} (x,y,z)\).

- If \(L\) is a
*connect sum*of two links \(L_1, L_2\), then you can take the HOMFLY polynomials of the two pieces, and multiply them:\(\displaystyle P_L (x,y,z) = P_{L_1} (x,y,z) P_{L_2} (x,y,z)\).

What is a connect sum? It’s when two knots or links are joined together by a pair of strands, as shown below.

And there you go.

Again, it’s not at all clear where these rules come from, or that they will always give the same result. There might be many ways to change the crossings and simplify the knot, but H and O and M and F and L and Y and P and T showed that in fact you do always obtain the same result for the polynomial.

Let’s see how to do this in a couple of examples.

First of all, for the unknot \(U\), by rule 1, its HOMFLY polynomial is \(P_U (x,y,z) = 1\).

Second, let’s consider two linked unknots as shown below. This is known as the *Hopf link*. Let’s call it \(H\).

Let’s orient both the loops so that they are anticlockwise. Pick one of the crossings and consider the three possibilities obtained by replacing it according to the skein relation described above, \(H^+, H^-, H^0\). You should find that \(H^+\) corresponds to the crossing as it is shown, so \(H^+ = H\). Changing the crossing results in two unlinked rings, that is, \(H^- =\) two split unknots. By rule 4 above then, \(P_{H^-} (x,y,z) = \frac{-(x+y)}{z} P_U (x,y,z) P_U (x,y,z)\); and as each unknot has HOMFLY polynomial \(1\), we obtain \(P_{H^-} (x,y,z) = \frac{-(x+y)}{z}\). On the other hand, smoothing the crossing into \(H^0\) gives an unknot, so \(P_{H^0} (x,y,z) = P_{U} (x,y,z) = 1\).

Putting this together with the skein relation (rule 2), we obtain the equation

\(\displaystyle x P_{H^+} (x,y,z) + y P_{H^-} (x,y,z) + z P_{H^0} (x,y,z) = 0\),

which gives

\(\displaystyle x P_H (x,y,z) + y \frac{-(x+y)}{z} + z = 0\)

and hence the HOMFLY of the Hopf link is found to be

\(\displaystyle P_H (x,y,z) = \frac{ y(x+y)}{xz} – \frac{z^2}{xz} = \frac{xy + y^2 – z^2}{xz}\).

###### When the Tutte is the HOMFLY

In 1988, Francois Jaeger showed that the Tutte and HOMFLY polynomials are closely related.

Given a graph \(G\) drawn in the plane, it has a Tutte polynomial \(T_G (x,y)\), as we’ve seen.

But from such a \(G\), Jaeger considered a way to *build an oriented link* \(D(G)\). And moreover, he showed that the HOMFLY polynomial of \(D(G)\) is closely related to the Tutte polynomial of \(G\). In other words, \(T_G (x,y)\) and \(P_{D(G)} (x,y,z)\) are closely related.

But first, let’s see how to build an link from a graph. It’s called the median construction. Here’s what you do. Starting from your graph \(G\), which is drawn in the plane, you do the following.

- Thicken \(G\) up. You can then think of it as a disc around each vertex, together with a band along each edge.
- Along each edge of \(G\), there is now a band. Take each band, and put a full right-handed twist in it. You’ve now got a surface which is twisted up in 3-dimensional space.
- Take the boundary of this surface. It’s a link. And this link is precisely \(D(G)\). (As it turns out, there’s also a natural way to put a direction on \(D(G)\), i.e. make it an oriented link.)

It’s easier to understand with a picture. Below we have a graph \(G\), and the link \(D(G)\) obtained from it.

A graph (source: wikimedia) and the link (source: Jaeger) obtained via the median construction.

Jaeger was able to show that in general, the Tutte polynomial \(T_G (x,y)\) and the HOMFLY polynomial \(P_{D(G)} (x,y,z)\) are related by the equation

\(\displaystyle P_{D(G)} (x,y,z) = \left( \frac{y}{z} \right)^{V(G)-1} \left( – \frac{z}{x} \right)^{E(G)} T_G \left( -\frac{x}{y}, \frac{-(xy+y^2)}{z^2} \right),\)

where \(V(G)\) denotes the number of vertices of \(G\), and \(E(G)\) denotes the number of edges of \(G\). Essentially, Jaeger showed that the process you can use to simplify the link \(D(G)\) to calculate the HOMFLY polynomial, corresponds in a precise way to the process you can use to simplify the graph \(G\) to calculate the Tutte polynomial.

In addition to this excellent correspondence — Tutte meeting HOMFLY — Jaeger was able to deduce some further consequences.

He showed that the four colour theorem is equivalent to a fact about HOMFLY polynomials: for every loopless connected plane graph \(G\), \(P_{D(G)} (3,1,2) \neq 0\).

Moreover, since colouring problems for plane graphs are known to be very hard, in terms of computational complexity — NP-hard — it follows that the computation of the HOMFLY polynomial is also NP hard.

Said another way: if you could find a way to compute the HOMFLY polynomial of a link in polynomial time, you would prove that \(P = NP\) and claim yourself a Millennium prize!