Using algebraic topology to prove the Fundamental Theorem of Algebra

The Fundamental Theorem of Algebra says that if p(t) is a non-constant single-variable polynomial over \mathbb{C} with degree \geq 1, then there exists at least one z \in \mathbb{C} such that p(z) = 0, i.e., the equation p(t) = 0 has at least one complex root. Another way of saying the same thing is that every non-constant single-variable polynomial p(t) with complex coefficients has at least one complex zero.
There are many proofs of the Fundamental Theorem of Algebra, including an almost purely algebraic one using Galois Theory and a famous complex analytic one using Rouché’s Theorem. It is well known that the Fundamental Theorem of Algebra can also be proved using a key idea from algebraic topology, namely that homotopic loops have the same winding number around a point. I find this approach intriguing and want to delve into some of its main aspects in this note. The basic idea of the proof is similar to the prototypical problem in algebraic topology of distinguishing between a disc and a disc with a hole in it using loops (i.e., closed paths). In the former case any closed loop can be shrunk until it reduces to a single point whereas in the latter case this is not always possible since the hole `gets in the way’. The key idea is that holes in a space can be detected by looking at paths in the space and by smoothly deforming those paths using a continuous function called a homotopy. In the context of proving the Fundamental Theorem of Algebra, the `holes’ are the zeros of the polynomials.
Let \Gamma be a path in \mathbb{C} - \{0\} which is specified by means of a parametrization \gamma(t) for t \in [a, b]. Intuitively, the winding number of \Gamma around zero is the number of times the path loops around the origin in the complex plane. For example, the path in the diagram below loops around the origin twice (anticlockwise) so has winding number equal to 2.

winding

The proof of the Fundamental Theorem of Algebra based on this idea requires us to be able to determine the winding number of \Gamma directly from its parametrization \gamma(t). This is done by first finding a continuous argument function for \gamma(t). To illustrate the process, consider the closed path in the diagram above, which has parametrization

\gamma(t) = (2 + \text{sin} \ t)\text{e}^{2it}

for t \in [0, 2\pi]. As the parameter t increases from 0 to 2 \pi, the image point \gamma(t) travels through the path \Gamma, starting and ending at the point \gamma(0) = \gamma(2 \pi) = 2 and looping around the origin twice anticlockwise. We imagine measuring the angular change of a ray emanating from the origin and passing through \gamma(t) as t increases from 0 to 2 \pi. The key point is that we want this measure of angular change to increase continuously as t increases. In general, this rules out using the principal arguments of \gamma(t) to measure the angular change because these exhibit a discontinuity at the negative real axis. (The principal argument \text{Arg}(\gamma(t)) is the unique argument of \gamma(t) lying in the interval (-\pi, \pi]. The principal argument function would therefore jump by 2\pi from \pi to -\pi as \gamma(t) crossed the negative real axis, and would thus fail to be continuous). Instead of using \text{Arg}(\gamma(t)) to measure the angular change of the ray from the origin, we measure the angular change using a continuous argument function \theta(t) which is such that

\gamma(t) = |\gamma(t)|\text{e}^{i \theta(t)}

for t \in [0, 2\pi]. For the parametrization \gamma(t) = (2 + \text{sin} \ t)\text{e}^{2it}, we see immediately that |\gamma(t)| = 2 + \text{sin} \ t (since 2 + \text{sin} \ t > 0 for t \in [0, 2\pi]). Therefore by inspection we see that one choice of continuous argument function for this case is

\theta(t) = 2t

for t \in [0, 2\pi]. Compare the behaviour of this continuous argument function with the behaviour of \gamma(t) itself: as t increases from 0 to 2\pi, the image point \gamma(t) starts from \gamma(0) = 2 and returns to this same point, \gamma(2\pi) = 2. However, the continuous argument function \theta increases from \theta(0) = 0 to \theta(2\pi) = 4\pi, recording the fact that the path \Gamma in the diagram above has wound around the origin twice.

In general, let \Gamma: \gamma(t) \ (t \in [a, b]) be a path in \mathbb{C} - \{0\}. It is not difficult to prove that we can always find a continuous argument function \theta(t) for \Gamma such that for each t \in [a, b], the value of the function \theta(t) is an argument of \gamma(t) and therefore satisfies

\gamma(t) = |\gamma(t)|\text{e}^{i \theta(t)}

or equivalently

\frac{\gamma(t)}{|\gamma(t)|} = \text{e}^{i \theta(t)}

Therefore if we are given any path \Gamma: \gamma(t) \ (t \in [a, b]) we can always obtain a suitable continuous argument function by expressing \frac{\gamma(t)}{|\gamma(t)|} in the form \text{e}^{i \theta(t)}, and then reading off \theta(t) from this. (But note that since \text{e}^{i \theta(t)} = \text{e}^{i (\theta(t) + 2n\pi)} for n \in \mathbb{Z}, the continuous argument function is only unique up to the addition of a constant term 2n\pi. In practice we can simply treat \theta(t) + 2n\pi as being equivalent to \theta(t) for each n \in \mathbb{Z}, and thus regard \theta(t) as being limited to the closed interval [0, 2\pi]).
As another (slightly more complicated) example, suppose a path \Gamma has parametrization \gamma(t) = 1 + it for t \in [0, 1] and we want to find a continuous argument function for it. We find that

\frac{\gamma(t)}{|\gamma(t)|} = \frac{1}{\sqrt{1+t^2}} + i \frac{t}{\sqrt{1+t^2}}

I have sketched the situation in the diagram below:

Complex

We have

\text{cos} \ \theta = \frac{1}{\sqrt{1+t^2}}

\text{sin} \ \theta = \frac{t}{\sqrt{1+t^2}}

and therefore

\text{tan} \ \theta = t

which implies

\theta(t) = \text{arctan} \ t

Therefore

\frac{\gamma(t)}{|\gamma(t)|} = \frac{1}{\sqrt{1+t^2}} + i \frac{t}{\sqrt{1+t^2}} = \text{e}^{i \ \text{arctan} \ t}

and we see that a suitable continuous argument function in this case would be \theta(t) = \text{arctan} \ t for t \in [0, 1]. Notice that here it is in fact the case that \theta(t) = \text{Arg}(\gamma(t)), but this is OK since the path \Gamma in this example will never cross the negative real axis.

Let us now return to imagining measuring the angular change of a ray emanating from the origin and passing through \gamma(t) along the path \Gamma: \gamma(t) \ (t \in [a, b]). The total angular change of the ray is given by \theta(b) - \theta(a) and so it follows that the total number of times \Gamma winds round the origin (i.e., the winding number of \Gamma around zero) is given by

\text{Wnd}(\Gamma, 0) = \frac{\theta(b) - \theta(a)}{2\pi}

(because an angular increase of 2 \pi corresponds to one full anticlockwise turn around the origin). This is the quantity we use to define the winding number of any path around zero.

To apply all this to proving the Fundamental Theorem of Algebra, let’s begin by formally defining the concept of a loop in \mathbb{R}^2 as a path \Gamma which is specified by means of a parametrization \gamma(t) for t \in [0, 1] such that \gamma(0) = \gamma(1). In other words, a loop is a path whose initial point is equal to its terminal point. Since the unit interval [0, 1] is homeomorphic to the interval [0, 2\pi], we could equally define a loop as a path \Gamma: \gamma(t) \ (t \in [0, 2\pi]) such that \gamma(0) = \gamma(2\pi). Furthermore, since the unit circle \mathbb{S} is the quotient space obtained by gluing together (i.e., regarding as equivalent) the boundary points 0 and 2\pi in the interval [0, 2\pi], we can also regard a loop as a path whose parametrization is an image of the unit circle, \Gamma : \gamma(\mathbb{S}). Notice that a unit circle with centre the origin can be specified as a parametrized path \mathbb{S}: f(t) = \text{e}^{i t} \ (t \in [0, 2 \pi]). The continuous argument function in this case is simply \theta(t) = t and so the winding number of \mathbb{S} around the origin is

\text{Wnd}(\mathbb{S}, 0) = \frac{2\pi - 0}{2\pi} = 1

Analogously, the winding number of a loop \Gamma : \gamma(\mathbb{S}) not passing through the origin and with continuous argument function \theta(t) is given by

\text{Wnd}(\Gamma, 0) = \frac{\theta(2\pi) - \theta(0)}{2\pi}

Using terminology from algebraic topology, we shall say for our purposes here that two loops winding around the origin are homotopic if one loop can be continuously deformed into the other, making sure that neither of them ever passes through the origin. This continuous deformation is achieved through a continuous function (called a homotopy) of the form

H: \mathbb{S} \times [0, 1] \longrightarrow \mathbb{R}^2 \backslash \{(0, 0)\}

which defines a continuously varying family of loops by mapping each point on the unit circle together with a parameter \epsilon \in [0, 1] on to a loop \Gamma_{\epsilon}: \gamma_{\epsilon}(t). We can think of the parameter \epsilon \in [0, 1] as a `slider control’ that allows us to smoothly transition between different loops \Gamma_{\epsilon} as the slider moves from 0 to 1.

A key point which is crucial to the proof of the Fundamental Theorem of Algebra is the following:

two loops are homotopic if and only if they have the same winding number

This can be proved straightforwardly but it is also intuitively obvious. If we imagine a loop winding around the origin a certain number of times, and then imagine continuously deforming this loop in such a way that no part of the loop ever passes through the origin, there is no reason to think that the winding number of the loop will change as a result of the deformation. (However, the winding number CAN change if we deform the loop in such a way that it passes through the origin). Therefore, if we succeed in defining a homotopy H between loops as described above, then we must have

\text{Wnd}(\Gamma_{\epsilon}, 0) = \text{Wnd}(\Gamma_0, 0)

for all \epsilon \in [0, 1], and in particular we must have

\text{Wnd}(\Gamma_1, 0) = \text{Wnd}(\Gamma_0, 0)

This result can be used directly to obtain a proof of the Fundamental Theorem of Algebra by contradiction as follows. Let p(t) be a non-constant single-variable polynomial over \mathbb{C} with degree n \geq 1. We can assume without loss of generality that the highest coefficient of p(t) is 1. We assume that p(t) has no zeros in \mathbb{C} and obtain a contradiction by proposing a homotopy H which for each \epsilon \in [0, 1) produces a loop \Gamma_{\epsilon} with parametrization

\gamma_{\epsilon}(t) = \frac{p(r(\epsilon)\text{e}^{it})}{r(\epsilon)^n + 1}

for t \in [0, 2\pi] where

r(\epsilon) = \frac{\epsilon}{1 - \epsilon}

and for \epsilon = 1 it produces a loop \Gamma_1 with parametrization

\gamma_1(t) = \text{e}^{nit}

for t \in [0, 2\pi]. Thus, \Gamma_{\epsilon} is defined for all \epsilon \in [0, 1]. The assumption that p(z) is non-zero for all z \in \mathbb{C} implies that the loop defined by each \gamma_{\epsilon} never meets the origin for any \epsilon \in [0, 1] since \gamma_{\epsilon}(t) = 0 iff p(r(\epsilon)\text{e}^{it}) = 0. Therefore if we can prove that the proposed homotopy above is indeed a continuous function of \epsilon, it would necessarily have to be the case that \text{Wnd}(\Gamma_1, 0) = \text{Wnd}(\Gamma_0, 0). It is obvious that \gamma_{\epsilon}(t) = \frac{p(r(\epsilon)\text{e}^{it})}{r(\epsilon)^n + 1} is a continuous function of \epsilon over [0, 1), and it only remains to prove that it is continuous at \epsilon = 1. To do this, let us specify the polynomial in question explicitly as

p(t) = t^n + a_{n-1}t^{n-1} + \cdots + a_0

Then we can write out the parametrization \gamma_{\epsilon}(t) explicitly as

\gamma_{\epsilon}(t) = \frac{p(r(\epsilon)\text{e}^{it})}{r(\epsilon)^n + 1} = \frac{r(\epsilon)^n}{r(\epsilon)^n + 1}\text{e}^{nit} + \frac{a_{n-1}r(\epsilon)^{n-1}\text{e}^{(n-1)it} + \cdots + a_0}{r(\epsilon)^n + 1}

for t \in [0, 2\pi]. As \epsilon \shortrightarrow 1, the function r(\epsilon) tends to +\infty, so as \epsilon \shortrightarrow 1 the second term on the right-hand side tends to 0 and the first term tends to \text{e}^{nit}. Therefore for each t we have

\lim_{\epsilon \shortrightarrow 1} \gamma_{\epsilon}(t) = \gamma_1(t)

The convergence is uniform in t (i.e., the convergence is not affected by the value of t in any way) and so \gamma_{\epsilon}(t) is a continuous function of \epsilon over the whole of [0, 1]. Therefore the proposed H is indeed a homotopy which defines a family of loops which can be smoothly deformed into each other without ever passing through the origin (under the assumption that p(z) is non-zero for all z \in \mathbb{C}). Therefore it must be the case that \text{Wnd}(\Gamma_1, 0) = \text{Wnd}(\Gamma_0, 0). But this last statement is not true here! We have

\text{Wnd}(\Gamma_1, 0) = \frac{n2\pi - 0}{2\pi} = n

(since the continuous argument function of \gamma_1(t) = \text{e}^{nit} is nt) whereas

\text{Wnd}(\Gamma_0, 0) = 0

(since \gamma_0(t) = a_0 is a constant with a constant argument function, so its winding number must be zero). This contradiction means that the assumption that p(z) is non-zero for all z \in \mathbb{C} must have been false, so the Fundamental Theorem of Algebra must be true.

To summarise, we have taken a circle in the complex plane of the form r(\epsilon)\text{e}^{it} for t \in [0, 2\pi] and have used every point z on the circle to evaluate a polynomial p(z). Since the polynomial is a continuous function, we ended up with a continuous closed loop in the complex plane. The degree of p(z) was assumed to be n, so as a result of the transformation \frac{p(r(\epsilon)\text{e}^{it})}{r(\epsilon)^n + 1} we had a term \text{e}^{nit} which dominated all other terms when r(\epsilon) became very large (i.e., when \epsilon approached 1). The winding number of the transformed loop was then \frac{n2\pi - 0}{2\pi} = n, so the transformed loop wound around the origin the same number of times as as the degree of p(z). On the other hand, when we let r(\epsilon) go to zero (i.e., when \epsilon approached 0), only the constant term in p(z) remained in the transformation \frac{p(r(\epsilon)\text{e}^{it})}{r(\epsilon)^n + 1}, so the winding number of the transformed loop was zero. But if \frac{p(r(\epsilon)\text{e}^{it})}{r(\epsilon)^n + 1} never passes through the origin, how can the winding number change as we change the size of r(\epsilon)? This contradiction proves that \frac{p(r(\epsilon)\text{e}^{it})}{r(\epsilon)^n + 1} must pass through the origin as we vary \epsilon in the interval [0, 1], and therefore p(z) must be zero for some z \in \mathbb{C} as stated by the Fundamental Theorem of Algebra.