--- title: 【數學理論】 07. 毛巾挑戰的終極解法—拓撲學 (Topology) tags: - 【數學理論】 url: https://hackmd.io/wcTj6mztR7K-q-_Tpnb7Tg lastSync: 2025-05-25T08:45:51.812Z hackmd: url: https://hackmd.io/wcTj6mztR7K-q-_Tpnb7Tg title: 【數學理論】 07. 毛巾挑戰的終極解法—拓撲學 (Topology) lastSync: 2025-05-25T08:52:03.477Z --- 毛巾挑戰的終極解法 === <font size=4><font color=gray>拓撲學 (Topology)</font><br></font><br> --- <!-- 20250524 --> 按照慣例,開頭先來說一個故事。 <br> 前陣子偶然在網路上刷到國外很紅的「**毛巾挑戰**」 <br> 不囉嗦,先來看看挑戰內容是什麼。 {%youtube lJd0a_lAV4s %} <br> 所以我們可以看到,毛巾挑戰的內容是: - 兩個人雙手分別握住毛巾兩端,並且兩條毛巾互相扣住。 - 在手不放開毛巾的情況下,能否讓兩個人分開? <br> 起初我看到這個挑戰的第一直覺是認為**絕對不可能成功**,但隨著越來越多挑戰成功的影片,抱持著一絲懷疑的同時,也開始漸漸相信其實說不定這是真的? <br> 對於這種討論幾何、扭結等問題,只能搬出我認為數學當中最難的**拓撲學 (Topology)** <br> ## 拓撲學 (Topology) **拓撲學**主要是一門研究在拓撲空間內,物體連續變化(例如拉伸、扭轉,但並非剪斷、黏貼)下維持不變的學科。其中還可以細分成以下幾個分支: >[!Important] **一般拓樸學(點集拓樸學)** 研究拓樸空間的基本概念和性質,例如連續性、緊緻性和連通性等。它為其他拓樸學分支提供了基礎,涉及對開集、閉集、鄰域等概念的研究。 >[!Important] **代數拓樸學** 利用抽象代數的方法研究拓樸空間,旨在通過代數不變量(如同調群、同倫群)來分類和分析拓樸空間的性質。其目標是尋找代數不變量,以分類在同胚意義下的拓樸空間。 >[!Important] **微分拓樸學** 研究具有光滑結構的流形上的可微函數,關注微分結構與拓樸性質之間的關係。它與微分幾何密切相關,主要研究在微分流形上的可微函數及其應用。 >[!Important] **幾何拓樸學** 主要研究低維流形及其與幾何的互動,尤其關注三維和四維空間中的拓樸性質。它透過幾何方法研究拓樸空間的性質,是低維流形研究的核心領域之一。 <br> 記得高中的數學老師曾說過:「如果學會了拓樸學就能成為數學大師。」 <br> 當時對於數學有濃厚興趣的我來說,宛如化身成**數學界真新鎮的小智**~~障~~,踏上**目標是成為數學大師**之路。 <br> 然而很快我就被現實打臉了,因為以下兩個原因: 1. 我的幾何學很爛。 2. 拓樸學非常的**抽象**。 <br> 舉例來說,你能相信在拓樸的世界裡**一個馬克杯跟一個甜甜圈**是一樣的嗎? <br> 如果你跟我一樣不相信、不知道這到底是在公三X的話,那恭喜你我們是同類人。 <br> 但如果你深信不疑,甚至去咖啡廳時會跟店員要甜甜圈裝咖啡,然後津津樂道的開始啃馬克杯,那你肯定有成為**拓樸學家**的資質。 <br> <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/01.jpg" alt="圖片描述" style="display: block; margin: 0 auto;" width="600"> > <font size=1><font color=gray>photo credit by: https://www.facebook.com/share/p/15rExYF7ZD/</font></font> <br> 事實上,**一個馬克杯跟一個甜甜圈**在拓樸學家眼裡確實是一樣的,因為在拓樸學當中,這兩個物體的形狀是同胚(Homeomorphism)。 --- ### 同胚(Homeomorphism) <br> **同胚**是拓樸學中的一個基本概念,用來描述兩個拓樸空間在拓樸結構上的等價性。直觀上,同胚兩個空間在拓樸性質上是相同的,只是形狀可能不同。 <br> 首先我們先來看看為甚麼**一個馬克杯跟一個甜甜圈是一樣的**。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/02.gif" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> > <font size=1><font color=gray>photo credit by: 由 Lucas Vieira - 自己的作品, 公有領域, https://commons.wikimedia.org/w/index.php?curid=1236079</font></font> <br> 上面這個動畫可以看到馬克杯跟甜甜圈可以互相變換。 <br> 下面我們多舉一些例子: >[!Tip] **例如:** > - **一個咖啡杯和一個甜甜圈(三維環面)** 在拓樸學上是同胚的,因為它們都具有一個空洞,可以通過變形將它們轉換成彼此。 > - **一個圓和一個橢圓**在拓樸學上是同胚的,因為可以通過拉伸將**圓**變成**橢圓**。 > - **一條橡皮筋和一條直線**在拓樸學上是同胚的,因為**橡皮筋**可以拉直成**一條直線**。 > - **一顆圓球和一個盤子**在拓樸學上是同胚的,因為**圓球**可以壓扁成**一個盤子**。 **同胚**可以看作是將一個物體**拉伸**、**扭曲**或**彎曲**成另一個物體,但不允許**剪切**或**黏貼**。這種情況叫做**可逆的連續變形**。 <br> >[!Note] **可逆的連續變形(Homotopy)** >**可逆連續變形**是拓撲學中的一個核心概念,是指在破壞與重組結構的情況下,通過一系列連續變化將一個拓撲空間變為另一個拓撲空間。如果兩個空間之間存在這種變形,它們被稱為同倫等價。 <br> 另外**同胚**具有以下的定義,對於這篇專欄不是太重要,只要知道有這個概念就好。 <br> >[!Note] **同胚** 設 $X$ 和 $Y$ 為兩個拓樸空間。如果存在一個函數 $$f: X \to Y$$ 滿足以下條件,則稱 $f$ 是一個**同胚**,並且 $X$ 和 $Y$ 是**同胚的**(Homeomorphic): >1. **連續性**:$f$ 是連續函數。 >2. **雙射性**:$f$ 是一個雙射,即 $f$ 是一一對應且滿射的函數。 >3. **逆連續性**:$f^{-1}: Y \to X$ 也是連續的。 如果 $f$ 滿足這三個條件,就可以說 $X$ 和 $Y$ 的拓樸結構完全相同。 <br> 以上定義參考即可。現在我們了解了拓樸學中兩個重要的概念:**同胚**以及**可逆的連續變形**,而且他們的關係是: $$同胚 \subset 可逆的連續變形$$ 也就是只有**同胚**的物體才能進行**可逆的連續變形**,然而可以進行**可逆的連續變形**的物體不一定是**同胚**。 <br> --- ### 拓樸結構分析 接下來我們就可以針對毛巾挑戰進行拓樸結構的分析了。 <br> 首先對兩個正在進行毛巾挑戰的人進行簡化的數學建模,我們可以把**兩個人的手臂+毛巾當作是環**,而**其餘部分就簡化成一根直線**,於是就可以利用以下程式進行建模。 :::spoiler **點擊查看程式碼** ```python= import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 定義參數 t = np.linspace(0, 2*np.pi, 200) radius = 1.0 # 直線1與直線2的座標 z = np.linspace(-2, 2, 100) x_line1 = np.zeros_like(z) y_line1 = np.zeros_like(z) z_line1 = z x_line2 = np.ones_like(z) * 2 y_line2 = np.zeros_like(z) z_line2 = z # 環1的參數方程(躺在xz平面上) x_ring1 = radius * np.cos(t) y_ring1 = np.zeros_like(t) z_ring1 = radius * np.sin(t) # 環2的參數方程(垂直於環1) x_ring2 = radius + radius * np.cos(t)/2 y_ring2 = radius * np.sin(t) z_ring2 = radius * np.cos(t)/2 # 建立圖形 fig = plt.figure(figsize=(12, 10)) ax = fig.add_subplot(111, projection='3d') # 繪製直線 ax.plot(x_line1, y_line1, z_line1, 'b-', linewidth=4, label='Body_1') ax.plot(x_line2, y_line2, z_line2, 'g-', linewidth=4, label='Body_2') # 分段繪製環1以創建深度效果 for i in range(len(t)-1): if abs(y_ring2[i]) < radius/2 and x_ring1[i] > 0: color1 = 'lightcoral' # 被環2穿過的部分用淺色 else: color1 = 'blue' ax.plot(x_ring1[i:i+2], y_ring1[i:i+2], z_ring1[i:i+2], color=color1, linewidth=4) # 分段繪製環2以創建深度效果 for i in range(len(t)-1): if abs(y_ring2[i]-0.8*radius) < radius/2 and x_ring1[i] > 0: color2 = 'lightcoral' # 被環1穿過的部分用淺色 else: color2 = 'green' ax.plot(x_ring2[i:i+2], y_ring2[i:i+2], z_ring2[i:i+2], color=color2, linewidth=4) # 設定視圖範圍 ax.set_xlim(-1.5, 2.5) ax.set_ylim(-1.5, 1.5) ax.set_zlim(-1.5, 1.5) # 設定比例相等 ax.set_box_aspect([4, 3, 3]) # 調整視角以更好地展示環的相互穿過 ax.view_init(elev=20, azim=45) # 添加標籤和標題 ax.set_xlabel('X-axis') ax.set_ylabel('Y-axis') ax.set_zlabel('Z-axis') ax.legend() plt.title('Towel Challenge Modelling') plt.show() ``` ::: 執行以上程式就可以得到以下輸出: <br> <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/03.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="600"> 其中可以看到,我特別將兩個環相互扣著的部分用不同顏色標記出來以便展示。 <br> 接下來為了方便分析拓樸結構,我們做一些簡化。我們都知道線段是可以伸縮的,所以在環上的線段(也就是人的身體的部分)收縮到環上,變成下圖。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/04.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="600"> <br> 我們會發現,原本的結構被簡化成兩個環了,而且這個簡化方式是可逆的連續變形,也就是沒有破壞、重組其結構的變形。<font color=red>**但是!這並不代表變形前後的結構是同胚的哦!**</font> <br> 現在我們有兩個互相扣著的環了,而事實上這種類型的拓樸結構有一個特別的名稱**霍普夫連結**。 <br> >[!Note] **霍普夫連結 (Hopf Link)** > **霍普夫連結**是由兩個閉環組成的拓撲結構,其特點是兩個環互相穿過一次。 <br> 另外,當兩個環沒有相互扣著,這種類型的拓樸結構也有一個特別的名稱叫**平凡連結**。 <br> >[!Note] **平凡連結 (Unlink)** > **平凡連結**也是由兩個閉環組成的拓撲結構,但是兩個環並沒有互相穿過。 <br> 有了這些概念,要證明毛巾挑戰是不是真的可以挑戰成功就簡單了。下面來說說我的證明思路: <br> >[!Tip] **證明思路** >**1.** 因為在挑戰開始前(兩個人還沒分開)的狀態可以被簡化成**霍普夫連結** >**2.** 可以用 **1.** 的簡化過程,將挑戰成功後(兩個人分開了)的狀態簡化成**平凡連結** >**3.** 所以只要我們能夠證明**霍普夫連結**跟**平凡連結**是同胚 >**4.** 就代表**霍普夫連結**跟**平凡連結**可以進行可逆的連續變形 >**5.** 可以進行**可逆的連續變形**代表**挑戰就可以成功** <br> 我相信聰明的你一定看出這個證明思路的重點在於 **3.**,所以接下來就讓我們來證明**霍普夫連結**跟**平凡連結**是不是同胚。 --- ## **證明** <br> 首先對於繩結類的拓樸,有發展出另外一套理論叫做**扭結理論 (Knot Theory)**,其中有將這些扭結給分門別類,而其中一種分類方式就是利用連結 (Link)。 <br> 鏈結(link)是指兩個或多個閉合曲線(通常是圓環)在三維空間中的互相纏繞方式,各種連結鏈結可能有不同連結數量,這個數量就被稱做是連結數 (Linking Number)。 >[!Note] **連結數 (Linking Number)** >若有兩條閉曲線 $C_1$ 和 $C_2$,其**連結數**可以利用**高斯連結數的積分公式**計算: $$ Lk(C_1, C_2) = \frac{1}{4\pi} \int_{C_1} \int_{C_2} \frac{\mathbf{r}_1 - \mathbf{r}_2}{\|\mathbf{r}_1 - \mathbf{r}_2\|^3} \cdot (\mathrm{d}\mathbf{r}_1 \times \mathrm{d}\mathbf{r}_2) $$ 其中:$\mathbf{r}_1$ 和 $\mathbf{r}_2$ 是分別在兩個環上移動的點的位置向量。 >這個積分公式是雙重積分,意味著: > >1. $\mathbf{r}_1$ 遍歷第一個環上的所有點 >2. $\mathbf{r}_2$ 遍歷第二個環上的所有點 >3. 對於每一對點,計算它們的相互影響的大小 > >而 $\mathrm{d}\mathbf{r}_1 和 \mathrm{d}\mathbf{r}_2$ 是這些點對應的切向量(表示曲線在該點的方向)。 這個公式的物理意義可以理解為: > >計算兩個環上所有點對之間的「相互作用」 $(\mathbf{r}_1 - \mathbf{r}_2)$ 表示兩點之間的位置差 $\|\mathbf{r}_1 - \mathbf{r}_2\|^3$ 在分母上類似於重力或電場的平方反比定律 $\mathrm{d}\mathbf{r}_1 \times \mathrm{d}\mathbf{r}_2$ 考慮了兩條曲線在這些點的相對方向 <br> 連結數定義的公式看起來有點複雜,但其實有個更直觀的計算方式: <br> >[!Tip] **計算連結數** >1. **選擇投影平面:** 將兩個閉合曲線投影到某個平面上,使它們的交叉點清晰可見,並且設定環旋轉的方向。 >2. **標記交叉點方向:** 在每個交叉點上,根據右手規則標記正負號。 >3. **計算總和:** 將所有交叉點的正負號相加,得到的總和的一半即為鏈結數。 <br> 接下來我們分別計算**霍夫普連結**以及**平凡鏈結**的連結數看看。 --- ### 1. **霍夫普連結的連結數** 首先將**霍夫普連結**投影到 $xy$ 平面上,接著設定兩個環都是順時針轉: <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/05.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> <br> >也可以逆時針轉,只要兩個環的方向一致即可。給予兩個環一致的定向(比如都是逆時針)是為了確保連結數的計算是有意義且一致。如果不給定一致的定向,同一個霍夫連結可能得到不同的連結數。且當我們改變其中一個環的定向時,連結數的符號會改變。 <br> 接著標記交叉點方向。因為我們可以看到,右邊<font color=blue>**藍色的環**</font>從下面往上穿過左邊<font color=green>**綠色的環**</font>,共有兩個交叉點,我們將上面的交叉點標記成 <font color=red>**A點**</font>,下面的交叉點標記成 <font color=red>**B點**</font>。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/06.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> <br> 接著我們先放大來看 <font color=red>**A點**</font>,可以看到這個交叉點是<font color=blue>**藍色的環**</font>在上,<font color=green>**綠色的環**</font>在下,而這邊有箭頭方向,我們可以發現,<font color=blue>**藍色的箭頭**</font>要**往順時針方向**才會跟<font color=green>**綠色的箭頭**</font>同方向。因為是**往順時針方向**,根據右手定則是遠離觀察者,標記為 $-1$。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/07.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> <br> 接著我們先放大再來看 <font color=red>**B點**</font>,可以看到這個交叉點是<font color=green>**綠色的環**</font>在上,<font color=blue>**藍色的環**</font>在下,而這邊的箭頭方向可以發現,<font color=green>**綠色的箭頭**</font>也是要**往順時針方向**才會跟<font color=blue>**藍色的箭頭**</font>同方向。因為是**往順時針方向**,根據右手定則是遠離觀察者,標記為 $-1$。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/08.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> <br> 最後計算總和,因為兩個交叉點的值都是 $-1$ ,所以計算結果為 $$ Lk(C_1, C_2) = \frac{1}{2} \cdot [(-1) + (-1)] = -1 $$ <br> 所以**霍夫普連結**的連結數等於 $-1$。 --- ### 2. **平凡連結的連結數** 接著我們再將**平凡連結**投影到 $xy$ 平面上,且一樣設定兩個環都是順時針轉: <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/09.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> >注意這邊兩個圓圈只是**重疊**哦! <br> 接著標記交叉點方向。因為我們可以看到,右邊<font color=blue>**藍色的環**</font>重疊在<font color=green>**綠色的環**</font>上方,共有兩個交叉點,為了跟**霍夫普連結**有所區隔,我們將上面的交叉點標記成 <font color=red>**C點**</font>,下面的交叉點標記成 <font color=red>**D點**</font>。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/10.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> <br> 接著我們先放大來看 <font color=red>**C點**</font>,可以看到這個交叉點是<font color=blue>**藍色的環**</font>在上,<font color=green>**綠色的環**</font>在下,而這邊有箭頭方向,我們可以發現,<font color=blue>**藍色的箭頭**</font>要**往順時針方向**才會跟<font color=green>**綠色的箭頭**</font>同方向。因為是**往順時針方向**,根據右手定則是遠離觀察者,標記為 $-1$。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/11.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> <br> 接著我們先放大再來看 <font color=red>**D點**</font>,可以看到這個交叉點是<font color=blue>**藍色的環**</font>在上,<font color=green>**綠色的環**</font>在下,而這邊有箭頭方向,我們可以發現,<font color=blue>**藍色的箭頭**</font>要**往逆時針方向**才會跟<font color=green>**綠色的箭頭**</font>同方向。因為是**往逆時針方向**,根據右手定則是靠近觀察者,標記為 $+1$。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/12.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> <br> 最後計算總和,因為交叉點的值分別是 $-1$ 以及 $+1$ ,所以計算結果為 $$ Lk(C_1, C_2) = \frac{1}{2} \cdot [(-1) + (+1)] = 0 $$ <br> 所以**平凡連結**的連結數等於 $0$。 <br> >[!Note] 註 如果你的數感夠敏銳的話,會發現其實在計算連結數時,透過「箭頭方向與順逆時針」搭配右手定則得判斷方法,就是高中時學過的**外積**,而當你回頭看連結數的定義時也會發現裡面有外積的概念 $(\mathrm{d}\mathbf{r}_1 \times \mathrm{d}\mathbf{r}_2)$ 。 <br> 現在我們已經個別計算出兩個連結的連結數,**霍普夫連結**的連結數等於 $-1$ ,表示兩個環彼此穿過一次;**平凡連結**的連結數等於 $0$ ,表示兩個環彼此之間並無相互穿過。 <br> 在拓撲學中,**連結數**是用來描述兩個閉曲線之間纏繞次數的重要**拓樸不變量**。 --- ### 3. 拓撲不變量 <br> 什麼是拓撲不變量? <br> >[!Note] **拓樸不變量(Topological Invariant)** **拓樸不變量**是拓樸學中的一個性質,能夠在拓樸空間進行連續變形(如拉伸或彎曲,但不包括撕裂或切割)時保持不變。這些不變量用於分類和區分不同的拓樸空間。常見的拓樸不變量包括: > > - **基本群(Fundamental Group)**:描述空間中環路的同倫類。 > - **歐拉示性數(Euler Characteristic)**:與空間的幾何結構相關。 > - **鏈結數(Linking Number)**:用於描述兩個環的纏繞關係。 <br> 這時你會發現,**鏈結數**也是拓樸不變量,這代表**只要不剪斷環或破壞其結構,連結數 $Lk(C_1, C_2)$ 就不會改變**。 <br> 這意味著,「連結數為 $-1$ 的**霍普夫連結**」無法利用不剪斷環或破壞其結構的方法變成「連結數為 $0$ 的**平凡連結**」。 <br> 同時也代表,在毛巾挑戰中,兩個人將毛巾扣在一起時,無法以不鬆開手或破壞其結構的方法,讓兩人分開。 <br> 所以毛巾挑戰**不可能在不作弊的情況下挑戰成功**。 --- ### 4. 小結 <br> 回顧一下,我們先是理解了**拓樸學**中的**同胚**以及**可逆的連續變形**,接著利用建模與簡化的方式,將毛巾挑戰時兩人成功前後的狀態分別簡化成**霍夫普連結**以及**平凡連結**並計算出個別的**連結數**,由於**連結數**為**拓撲不變量**,而霍普夫連結與平凡連結的**拓撲不變量**不同,所以這兩種連結不同胚,從而在毛巾挑戰中無法在不鬆開手或破壞其結構的情況下分開。 --- <br> ## 結論 看到這邊可能有些人會好奇:**可是有些影片挑戰成功了**,其實仔細看會發現很少有人發出真正解法,或是用錯位遮擋的方式來掩飾偷偷放開毛巾的行為,所以**毛巾挑戰終究還是一場騙局**。 <br> 在這篇專欄中,我們從觀察到的現象開始,到蒐集資料、推導並證實,最後得知真相。仔細想想生活中不乏很多現象值得我們去探求真相,無論是真是假,都會讓我們更加趨近於真理,保持實事求是的態度才能在這個資訊爆炸的時代,辨別真假,避免被混淆視聽。 <br> 我是Lewis,我們[**下一篇**](https://hackmd.io/@lewisjjj800/r1U-OQefxl)專欄見!