The Fundamental Group of the Circle
===================================

Our first real theorem will be the calculation :math:`\pi_1(S^1) \approx \mathbb{Z}`. Besides its intrinsic
interest, this basic result will have several immediate applications of some substance,
and it will be the starting point for many more calculations in the next section. It
should be nosurprise then that the proof will involve some genuine work.

.. _theorem 1.7:

.. container:: no-indent

        ..

        **Theorem 1.7.** :math:`\pi_1(S^1)` *is an infinite cyclic group generated by the homotopy class of
        the loop* :math:`w(s)=(\cos 2\pi s, \sin 2\pi s)` *based at* :math:`(1,0)`.

        ..

.. image:: fig/thm-1-7.png
    :width: 20%
    :align: right

Note that :math:`[w]^n=[w_n]` where :math:`w_n(s) = (\cos 2\pi ns, \sin 2\pi ns)` for :math:`n \in \mathbb{Z}`. The
theorem is therefore equivalent to the statement that every loop in :math:`S^1` based at :math:`(1,0)`
is homotopic to :math:`w_n` for a unique :math:`n \in \mathbb{Z}`. To prove this the idea will
be to compare paths in :math:`S^1` with paths in :math:`\mathbb{R}` via the map :math:`p:\mathbb{R} \rightarrow S^1`
given by :math:`p(s) = (\cos 2\pi s, \sin 2\pi s)`. This map can be visualized
geometrically by embedding :math:`\mathbb{R}` in :math:`\mathbb{R}^3` as the helix parametrized by 
:math:`s \mapsto (\cos 2\pi s, \sin 2\pi s, s)`, and then :math:`p` is the restriction to the helix
of the projection of :math:`\mathbb{R}^3` onto :math:`\mathbb{R}^2`, :math:`(x,y,z) \mapsto (x,y)`. Observe that
the loop :math:`w_n` is the composition :math:`p\tilde{w}_n` where :math:`\tilde{w}_n:I \rightarrow \mathbb{R}` is the path
:math:`\tilde{w}_n(s)=ns`, starting at :math:`0` and ending at :math:`n`, winding around the helix
:math:`\mid n \mid` times, upward if :math:`n > 0` and downward if :math:`n < 0`. The relation
:math:`w_n = p \tilde{w}_n` is expressed by saying that :math:`\tilde{w}_n` is a **lift** of :math:`w_n`.

we will prove the theorem by studying how paths in :math:`S^1` lift to paths in :math:`\mathbb{R}`. Most 
of the arguments will appy in much greater generality, and it is both more efficient
and more enlightening to give them in the general context. The first step will be to
define  this context.

Given space :math:`X`, a **covering space** of :math:`X` consists of a space :math:`\tilde{X}` and a map :math:`p: \tilde{X} \rightarrow X`
satisfying the following condition:


.. container:: no-margin

    ..

    .. _*:

        (:math:`*`) For each point :math:`x \in X` there is an open neighborhood :math:`U` of :math:`x` in :math:`X` such that 
        :math:`p^{-1}(U)` is a union of disjoint open sets each of which is mapped homeomorphically onto :math:`U` by :math:`p`.

    ..

    Such a :math:`U` will be called **evenly covered**. For example, for the previously defined map 
    :math:`p:\mathbb{R} \rightarrow S^1` any open arc in :math:`S^1` is evenly covered.


    |indent| To prove the theorem we will need just the following two facts about covering spaces :math:`p:\tilde{X} \rightarrow X`.
    
    .. _a:

    (a) For each path :math:`f: I \rightarrow X` starting at a point :math:`x_0 \in X` and each :math:`\tilde{x}_0 \in p^{-1}(x_0)` there
        is a unique lift :math:`\tilde{f}:I\rightarrow \tilde{X}` starting at :math:`\tilde{x}_0`.

    .. _b:

    (b) For each homotopy :math:`f_t:I \rightarrow X` of paths starting at :math:`x_0` and each :math:`\tilde{x}_0 \in p^{-1}(x_0)` there
        is a unique lifted homotopy :math:`\tilde{f}_t: I \rightarrow \tilde{X}` of paths starting at :math:`\tilde{x}_0`
    
    Before proving these facts, let us see how they imply the theorem.

    **Proof of Theorem 1.7:** Let :math:`f:I \rightarrow S^1` be a loop at the basepoint :math:`x_0=(1,0)`, representing
    a given element of :math:`\pi_1(S^1, x_0)`. By :ref:`(a) <a>` there is a lift :math:`\tilde{f}` starting at :math:`0`. This path
    :math:`\tilde{f}` ends at some integer :math:`n` since :math:`p\tilde{f}(1)=f(1)=x_0` and :math:`p^{-1}(x_0)=\mathbb{Z} \subset \mathbb{R}`. Another
    path in :math:`\mathbb{R}` from :math:`0` to :math:`n` is :math:`\tilde{w}_n`, and :math:`\tilde{f} \simeq \tilde{w}_n` via the linear homotopy :math:`(1-t)\tilde{f}+t\tilde{w}_n`.
    Composing this homotopy with :math:`p` gives a homotopy :math:`f \simeq w_n` so :math:`[f]=[w_n]`.

    |indent| To show that :math:`n` is uniquely determined by :math:`[f]`, suppose that :math:`f \simeq w_n` and 
    :math:` f \simeq w_m`, so :math:`w_m \simeq w_n. Let :math:`f_t`be a homotopy from :math:`w_m=f_0` to :math:`w_n = f_1`. By :ref:`(b) <b>` this
    homotopy lifts to a homotopy :math:`\tilde{f}_t` of paths starting at :math:`0`. The uniqueness part of :ref:`(a) <a>`
    implies that :math:`\tilde{f}_0 = \tilde{w}_m` and :math:`\tilde{f}_1=\tilde{w}_n`. Since :math:`\tilde{f}_t` is homotopy of paths, the endpoint
    :math:`\tilde{f}_t(1)` is independent of :math:`t`. For :math:`t=0` this endpoint is :math:`m` and for :math:`t=1` it is :math:`n`, so
    :math:`m=n`.

    |indent| It reamins to prove :ref:`(a) <a>` and :ref:`(b) <b>`. Both statements can be deduced from a more
    general assertion about covering space :math:`p:\tilde{X} \rightarrow X`:

    .. _c:

    (c) Given a map :math:`F:Y \times I \rightarrow X` and a map :math:`\tilde{F}:Y \times \{0\} \rightarrow \tilde{X}` lifting :math:`F \mid Y \times \{0\}`, then there
        is a unique map :math:`\tilde{F}: Y \times I \rightarrow \tilde{X}` lifting :math:`F` and restricting to the given :math:`\tilde{F}` on :math:`Y \times \{0\}`.

    Statement :ref:`a <a>` is the special case that :math:`Y` is a point, and :ref:`(b) <b>` is obtained by applying :ref:`(c) <c>`
    with :math:`Y=I` in the following way. The homotopy :math:`f_t` in :ref:`(b) <b>` gives a map :math:`F: I \times I \rightarrow X` 
    by setting :math:`F(s,t) = f_t(s)` as usual. A unique lift :math:`\tilde{F} : I \times \{0\} \rightarrow \tilde{X}` is obtained by an 
    application of :ref:`(a) <a>`. Then :ref:`(c) <c>` gives a unique lift :math:`\tilde{F}: I \times I \rightarrow \tilde{X}`. The restrictions :math:`\tilde{F} \mid \{0\} \times I`
    and :math:`\tilde{F} \mid \{1\} \times I` are paths lifting constant paths, hence they must also be constant by 
    the uniqueness part of :ref:`(a) <a>`. So :math:`\tilde{f}_t(s) = \tilde{F}(s,t)` is homotopy of paths, and :math:`\tilde{f}_t` lifts :math:`f_t`
    since :math:`p\tilde{F} = F`.

    |indent| To prove :ref:`(c) <c>` we will first construct a lift :math:`\tilde{F}:N\times I \rightarrow \tilde{X}` for :math:`N` some neighborhood
    in :math:`Y` of a given point :math:`y_0 \in Y`. Since :math:`F` is continuous, every point :math:`(y_0, t) \in Y\times I`
    has a product neighborhood :math:`N_t \times (a_t, b_t)` such that :math:`F(N_t \times (a_t, b_t))` is contained in 
    an evenly covered neighborhood of :math:`F(y_0, t)`. By compactness of :math:`\{y_0\}\times I`, finitely
    many such products :math:`N_t \times (a_t, b_t)` cover :math:`\{y_0\} \times I`. This implies that we can choose
    that for each :math:`i,\, F(N \times [t_i, t_{i+1}])` is contained in an evenly covered neighborhood :math:`U_i`.
    Assume inductively that :math:`\tilde{f}` has been constructed on :math:`N \times [0, t_i]`, starting with the given 
    :math:`\tilde{F}` on :math:`N \times \{0\}`. We have :math:`F(N\times [t_i, t_{i+1}]) \subset U_i`, so since :math:`U_i` is evenly covered there is 
    an open set :math:`\tilde{U}_i \subset \tilde{X}` projecting homeomorphically onto :math:`U_i` by :math:`p` and containing the 
    point :math:`\tilde{F}(y_0, t_i)`. After replacing :math:`N` by a smaller neighborhood of :math:`y_0` we my assume
    that :math:`\tilde{F}(N \times \{t_i\})` is contained in :math:`\tilde{U}_i`, namely, replace :math:`N \times \{t_i\}` by its intersection with
    :math:`(\tilde{F}|N \times \{t_i\})^{-1}(\tilde{U}_i)`. Now we can define :math:`\tilde{F}` on :math:`N \times [t_i, t_{i+1}]` to be the composition of :math:`F`
    with the homeomorphism :math:`p^{-1}: U_i \rightarrow \tilde{U}_i`. After a finite number of steps we eventually
    get a lift :math:`\tilde{F}:N \times I \rightarrow \tilde{X}` for some neighborhood :math:`N` of :math:`y_0`.

    |indent| Next we show the uniqueness part of :ref:`(c) <c>` in the special case that :math:`Y` is a point. In this 
    case we can omit yfrom the rotation. So suppose :math:`\tilde{F}` and :math:`\tilde{F}` are two lifts of :math:`F:I \rightarrow X`
    such that :math:`\tilde{F}(0)=\tilde{F}'(0)'`. As before, choose a partition :math:`0=t_0<t_1< \cdots < t_m = 1` of
    :math:`I` so that for each :math:`i,\, F([t_i, t_{i+1}])` is contained in some evenly covered neighborhood
    :math:`U_i`. Assume inductively that :math:`\tilde{F}=\tilde{F}'` on :math:`[0,t_i]`. Since :math:`[t_i, t_{i+1}]` is connected, so is
    projecting homeomorphically to :math:`U_i` as in :ref:`(*) <*>`. By the same token, :math:`\tilde{F}'([t_i,t_{i+1}])` lies
    in a single :math:`\tilde{U}_i`, in fact in the same one that contains :math:`\tilde{F}([t_i, t_{i+1}])` since :math:`\tilde{F}'(t_i)=\tilde{F}(t_i)`.
    Because :math:`p` is injective on :math:`\tilde{U}_i` and :math:`p\tilde{F} = p\tilde{F}'`, it follows that :math:`\tilde{F}=\tilde{F}'` on :math:`[t_i, t_{i+1}]`, and
    the induction step is finished.

    |indent| The last step in the proof of :ref:`(c) <c>` is to observe that since the :math:`\tilde{F}`'s constructed above
    on sets of the form :math:`N\times I` are unique when restricted to each segment :math:`\{y\}\times I`, they
    must agree whenever two such sets :math:`N \times I` overlap. So we obtain a well-defined lift :math:`\tilde{F}` 
    on all of :math:`Y \times I`. This :math:`\tilde{F}` is cocntinuous since it is continuous on each :math:`N \times I`. And :math:`\tilde{F}` is
    unique since it is unique on each segment :math:`\{y\} \times I`. |qed|

|indent| Now we turn to some applications of the calculation of :math:`\pi_1(S^1)`, beginning with a
proof of the Fundamental Theorem of Algebra.

.. _theorem 1.8:

.. container:: 

        **Theorem 1.8.** *Every nonconstant polynomial with coefficients in* :math:`\mathbb{C}` *has a root in* :math:`\mathbb{C}`.

    **Proof:** We may assume the polynomial is of the form :math:`p(z) = z^n + a_1z^{n-1}+ \cdots + a_n`.
    If :math:`p(z)` has no roots in :math:`\mathbb{C}`, then for each real number :math:`r \geq 0` the formula

    .. math::

        f_r(s) = \frac{p(re^{2\pi is}) / p(r)}{\mid p(re^{2\pi is}) / p(r) \mid}

    defines a loop in the unit circle :math:`S^1 \subset \mathbb{C}` based at :math:`1`. As :math:`r` varies, :math:`f_r` is a homotopy of
    loops based at :math:`1`. Since :math:`f_0` is the trivial loop, we deduce that the class :math:`[f_r] \in \pi_1(S^1)`
    is zero for all :math:`r`. Now fix a large value of :math:`r`, bigger than :math:`|a_1|+ \cdots + |a_n|` and bigger
    than :math:`1`. Then for :math:`|z|=r` we have

    .. math::

        |z^n| > (|a_1| + \cdots + |a_n|)|z^{n-1}| + \cdots + |a_n| \geq |a_1z^{n-1} + \cdots + a_n|

    From the inequality :math:`|z^n| > |a_1z^{n-1} + \cdots + a_n|` it follows that the polynomial :math:`p_t(z)=z^n+t(a_1z^{n-1}+ \cdots a_n)`
    has no roots on the circle :math:`|z|=r` when :math:`0 \leq t \leq 1`. Replacing
    :math:`p` by :math:`p_t` in the formula for :math:`f_r` to the loop :math:`w_n(s) = e^{2\pi ins}`. By :ref:`Theorem 1.7 <theorem 1.7>`, :math:`w_n` represents
    :math:`n` times a generator of the infinite cyclic group :math:`\pi_1(S^1)`. Since we have shown that 
    :math:`[w_n]=[f_r]=0`, we conclude that :math:`n=0`. Thus the only polynomials without roots 
    in :math:`\mathbb{C}` are constants. |qed|

|indent| Our next application is the Brouwer fixed point theorem in dimension :math:`2`.

.. _theorem 1.9:

.. container::

        **Theorem 1.9.** *Every continuous map* :math:`h:D^2 \rightarrow D^2` *has a fixed point, that is, a point*
        :math:`x \in D^2` *with* :math:`h(x)=x`.

    |indent| Here we are using the standard notation :math:`D^n` for the closed unit disk in :math:`\mathbb{R}^n`, all
    vectors :math:`x` of length :math:`|x| \leq 1`. Thus the boundary of :math:`D^n` is the unit sphere :math:`S^{n-1}`.

    .. image:: fig/thm-1-9.png
        :align: right
        :width: 30%

    **Proof:** Suppose on the contrary that :math:`h(x) \neq x` for all :math:`x \in D^2`. 
    Then we can define a map :math:`r:D^2 \rightarrow S^1` by letting :math:`r(x)` be the 
    point of :math:`S^1` where the ray in :math:`\mathbb{R}^2` starting at :math:`h(x)` and passing
    through :math:`x` leaves :math:`D^2`. Continuity of :math:`r` is clear since small
    perturbations of :math:`x` produce small perturbations of :math:`h(x)`, hence
    also small perturbations of the ray through these two points.
    The crucial property of :math:`r`, besides continuity, is that :math:`r(x) = x` if :math:`x \in S^1`. Thus :math:`r` is 
    a retraction of :math:`D^2` onto :math:`S^1`. We will show that no such retraction can exist.

    |indent| Let :math:`f_0` be any loop in :math:`S^1`. In :math:`D^2` there is a homotopy of :math:`f_0` to a constant loop, for
    example the linear homotopy :math:`f_t(s)=(1-t)f_0(s)+tx_0` where :math:`x_0` is the basepoint
    of :math:`f_0`. Since the retraction :math:`r` is the identity on :math:`S^1`, the composition :math:`rf_t` is then a 
    homotopy in :math:`S^1` from :math:`rf_0=f_0` to the constant loop at :math:`x_0`. But this contradicts the
    fact that :math:`\pi_1(S^1)` is nonzero. |qed|

|indent| This theorem was first proved by Brouwer around 1910, quite early in the history
of topology. Brouwer in fact proved the corresponding result for :math:`D^n`, and we shall
obtain this generalization in :ref:`Corollary <corollary 2.15>` using homology groups in place of :math:`\pi_1`.
One could also use the higher homotopy group :math:`\pi_n`. Brouwer's original proof used
neither homology nor homotopy groups, which had not been invented at the time.
Instead it used the notion of degree for maps :math:`S^n \rightarrow S^n`, which we shall define in :ref:`§2.2 <section 2.2>`
using homology but which Brouwer defined irectly in more geometric terms.

|indent| These proofs are all arguments by contradiction, and so they show just the existence 
of fixed points without giving any clue as to how to find one in explicit cases.
Our proof of the :ref:`Fundamental Theorem of Algebra <theorem 1.8>` was similar in this regard. There
exist other proofs of the Brouwer fixed point theorem that are somewhat more constructive,
for example the elegant and quite elementary proof by `Sperner in 1928 <https://en.wikipedia.org/wiki/Sperner%27s_lemma>`_,
which is explained very nicely in :ref:`[Aigner-Ziegler 1999]`.

|indent| The techniques used to calculate :math:`\pi_1(S^1)` can be applied to prove the Borsuk-Ulam
theorem in dimension two:

.. _theorem 1.10:

.. container::

        **Theorem 1.10.** *For every continuous map* :math:`f:S^2 \rightarrow \mathbb{R}^2` *there exists a pair of antipodal
        points* :math:`x` and :math:`-x` in :math:`S^2` with :math:`f(x)=f(-x)`.

    |indent| It may be that there is only one such pair of antipodal points :math:`x,\, -x`, for example
    if :math:`f` is simply orthogonal projection of the standard sphere :math:`S^2 \subset \mathbb{R}^3` onto a plane.

    |indent| The Borsuk-Ulam theorem holds more generally for maps :math:`S^n \rightarrow \mathbb{R}^n`, as we will
    show in :ref:`Corollary 2B.7<corollary 2B.7>`. The proof for :math:`n=1` is easy since difference :math:`f(x)-f(-x)`
    changes sign as :math:`x` goes halfway around the circle, hecne this difference must be zero
    for some :math:`x`. For :math:`n \geq 2` the theorem is certainly less obvious. Is it apparent, for 
    example, that at every instant there must be a pair of antipodal points on the surface
    of the earth having the same temperature and the same barometric pressure?

    |indent| The theorem says in particular that there is no one-to-one continuous map from
    :math:`S^2` to :math:`\mathbb{R}^2`, so :math:`S^2` is not homeomorphic to a subspace of :math:`\mathbb{R}^2`, an intuitively obvious fact
    that is not easy to prove directly.

    **Proof:** If the conclusion is false for :math:`f:S^2 \rightarrow \mathbb{R}^2`, we can define a map :math:`g:S^2\rightarrow S^1` by
    :math:`g(x)=(f(x)-f(-x))/|f(x)-f(-x)|`. Define a loop :math:`\eta` circling the equator of
    :math:`S^2 \subset \mathbb{R}^3` by :math:`\eta (s)=(\cos 2\pi s, \sin 2\pi s, 0)`, and let :math:`h:I \rightarrow S^1` be the composed loop :math:`g\eta`.
    Since :math:`g(-x)=-g(x)`, we have the relation :math:`h(s+\frac{1}{2})=-h(s)` for all :math:`s` in the interval
    :math:`[0,\frac{1}{2}]`. As we showed in the calculation of :math:`\pi_1(S^1)`, the loop :math:`h` can be lifted to a path
    :math:`\tilde{h}: I \rightarrow \mathbb{R}`. The equation :math:`h(s+\frac{1}{2})=-h(s)` implies that :math:`\tilde{h}(s+\frac{1}{2})=\tilde{h}(s)+\frac{q}{2}` for
    some odd integer :math:`q` that might conceivably depend on :math:`s \in [0,\frac{1}{2}]`. But in fact :math:`q` is 
    independent of :math:`s` since by solving the equation :math:`\tilde{h}(s+\frac{1}{2})=\tilde{h}(s)+\frac{q}{2}` for :math:`q` we see that
    :math:`q` depends continuously on :math:`s \in [0, \frac{1}{2}]`, so :math:`q` must be a constant since it is constrained
    to integer values. In particular, we have :math:`\tilde{h}(1)=\tilde{h}(\frac{1}{2})+\frac{q}{2}=\tilde{h}(0)+q`. This means
    that :math:`h` represents :math:`q` times a generator of :math:`\pi_1 (S^1)`. Since :math:`q` is odd, we conclude that :math:`h`
    is not nullhomotopic. But :math:`h` was the composition :math:`g\eta : I \rightarrow S^2 \rightarrow S^1`, and :math:`\eta` is obviously
    nullhomotopic in :math:`S^2`, so :math:`g\eta` is nullhomotopic in :math:`S^1` by composing a nullhomotopy of 
    :math:`\eta` with :math:`g`. THus we have arrived at a contradiction. |qed|

.. _corollary 1.11:

.. container::

        **Corollary 1.11.** *Whenever* :math:`S^2` *is expressed as the union of three closed sets* :math:`A_1,\, A_2`,
        *and* :math:`A_3`, t*then at least one of these sets must contain a pair of antipodal points* :math:`\{x,\,-x\}`
    
    **Proof:** Let :math:`d_i:S^2 \rightarrow \mathbb{R}` measure distance to :math:`A_i`, that is, :math:`d_i(x)=\inf_{y\in A_t}|x-y|`. This
    is continuous function, so we may apply the :ref:`Borsuk-Ulam theorem <theorem 1.10>` to the map
    :math:`S^2 \rightarrow \mathbb{R}^2`, :math:`x \mapsto (d_1(x), d_2(x))`, obtaining a pair of antipodal points :math:`x` and :math:`-x` with
    :math:`d_1(x)=d_1(-x)` and :math:`d_2(x)=d_2(-x)`. If either of these two distances is zero, then 
    :math:`x` and :math:`-x` both lie in the same set :math:`A_1` or :math:`A_2` since these are closed sets. On the other
    hand, if the distances from :math:`x` and :math:`-x` to :math:`A_1` and :math:`A_2` are both strictly positive, then
    :math:`x` and :math:`-x` lie in neither :math:`A_1` nor :math:`A_2` so they must lie in :math:`A_3`. |qed|

|indent| To see that the number 'tree' in this result is best possible, consider a sphere
inscribed in a tetrahedron. Projecting the four faces of the tetrahedron radially onto
the sphere, we obtain a cover of :math:`S^2` by four closed sets, none of which contains a pair
of antipodal points.

|indent| Assuming `the higher-dimensional version of the Borsuk-Ulam theorem <https://en.wikipedia.org/wiki/Borsuk%E2%80%93Ulam_theorem>`_, the same
arguments show that :math:`S^n` cannot be covered by :math:`n+1` closed sets without antipodal
pairs of points, though it can be covered by :math:`n+2` such stes, as the higher-dimensional
analog of a tetrahedron shows. Even the case :math:`n=1` is somewhat interesting: If the 
circle is covered by two closed sets, one of them must contain a pair of antipodal
points. This is of course false for nonclosed sets since the circle is the union of two
disjoint half-open semicircles.

|indent| The relation between the fundamental group of a product space and the 
fundamental groups of its factors is as simple as one could wish:

.. _proposition 1.12:

.. container::

        **Proposition 1.12.** :math:`\pi_1(X \times Y)` *is isomorphic to* :math:`\pi_1(X) \times \pi_1(Y)` *if* :math:`X` *and* :math:`Y` are path-connected.
    
    **Proof:** A basic property of the product topology is that a map :math:`f:Z \rightarrow X \times Y` is the 
    continuous iff the maps :math:`g:Z \rightarrow X` and :math:`h:Z \rightarrow Y` defined by :math:`f(z)=(g(z),h(z))` are both
    continuous. Hence a loop :math:`f` in :math:`X \times Y` based at :math:`(x_0, y_0)` is equivalent to a pair of loops
    :math:`g` in :math:`X` and :math:`h` in :math:`Y` based at :math:`x_0` and :math:`y_0` respectively. Similarly, a homotopy :math:`f_t` of a loop
    in :math:`X \times Y` is equivalent to a pair of homotopies :math:`g_t` and :math:`h_t` of the corresponding loops
    in :math:`X` and :math:`Y`. Thus we obtain a bijection :math:`\pi_1(X \times Y, (x_0,y_0)) \approx \pi_1(X,x_0)\times \pi_1(Y,y_0)`,
    :math:`[f] \mapsto ([g],[h])`. This is obviously a group homomorphism, and hence an isomorphism. |qed|

.. image:: fig/ex-1-13.png
    :width: 25%
    :align: right

**Example 1.13: The Torus.** By the proposition we have an isomorphism :math:`\pi_1(S^1 \times S^1) \approx \mathbb{Z} \times \mathbb{Z}`.
Under this isomorphism a pair :math:`(p,q) \in \mathbb{Z} \times \mathbb{Z}` corresponds to a loop that winds
:math:`p` times around one :math:`S^1` factor of the torus and :math:`q` times around the 
other :math:`S^1` factor, for example the loop :math:`w_{pq}(s)=(w_p(s),w_q(s))`.
Interestingly, this loop can be knotted, as the figure shows for
the case :math:`p=3,\, q=2`. The knots that arise in this fashion, the
so-called *torus knots*, are studied in :ref:`Example 1.24 <example 1.24>`.

|indent| More generally, the :math:`n`-dimensional torus, which is the product of :math:`n` circles, has
fundamental group isomorphic to the product of :math:`n` copies of :math:`\mathbb{Z}`. This follows by
induction on :math:`n`.















.. |indent| raw:: html

    <span style="margin-left: 2em">

.. |qed| raw:: html
    
    <span style="float:right">&#9723</span>