康托爾對角線論證:為什麼實數無法全部列成一張清單

假設有人遞給你一張清單。這是一張無限長的清單,他們宣稱它包含 0 到 1 之間的每一個實數。不是抽樣,也不是挑選:是每一個,整齊地編號為 r1、r2、r3,依此類推,永遠延伸下去。
康托爾(Georg Cantor)在 1891 年的回應是:不論你遞給我什麼清單,我都能讀出一個不在其上的數。這個構造只需要大約三十秒就能描述完。它的後果卻花了數學家數十年才消化,因為它意味著無限不只有一種大小。
計數與列表
在進入對角線的手法之前,先精確說明什麼叫做「可數」會有幫助。如果你能給一個集合的每個元素指派一個獨一無二的自然數標籤:第一個元素、第二個元素、第三個元素,依此類推,而且沒有任何剩餘,那麼這個集合就是可數的。自然數本身依定義就是可數的。整數也是(把它們列成 0、1、-1、2、-2……),甚至有理數也是,不過要列出每個分數,需要一個巧妙的之字形模式。
康托爾的論證顯示,0 到 1 之間的實數確實不一樣:不論你怎麼嘗試,都不存在這樣的標號。這不是想像力的失敗,而是一個證明,說明這項任務是不可能的。
假設清單存在
這個論證是一個反證法。先把對方想要的一切都給他:假設一張包含 (0, 1) 中每個實數的完整清單確實存在。把每個數寫成無限小數展開。
清單的開頭可能像這樣:
- ...
每個條目都永遠寫下去。清單也永遠寫下去。而且依照假設,0 到 1 之間的每個實數都出現在清單上的某處。
現在來看看沿著對角線往下讀時會發生什麼。
讀出對角線
看 r1 的第一位小數、r2 的第二位小數、r3 的第三位,依此類推。在上面的例子中,這些對角線上的數字是:1, 3, 0, 2, 9, ...
現在你一位一位地造出一個新的數,稱它為 d。規則是:對每個對角線上的數字,選一個不同的數字,但刻意避開 0 和 9。
| r₁ | 0 | . | 1 | 4 | 1 | 5 | 9 | |
| r₂ | 0 | . | 3 | 3 | 3 | 3 | 3 | |
| r₃ | 0 | . | 5 | 0 | 0 | 0 | 0 | |
| r₄ | 0 | . | 7 | 1 | 8 | 2 | 8 | |
| r₅ | 0 | . | 6 | 0 | 2 | 5 | 9 | |
| new | 0 | . | 2 | 4 | 1 | 3 | 8 | … |
Each highlighted digit sits on the diagonal. The new number changes every one of them (1 3 0 2 9 becomes 2 4 1 3 8), so it cannot equal any row in the list.
對角線上的數字是 1、3、0、2、9。套用規則得到 2、4、1、3、8。於是
避開 0 和 9 是一個小而必要的防護措施。有些實數有兩種小數表示法:0.4999…… 與 0.5000…… 指的是數線上的同一個點。把一個數字翻轉成 0 或 9,可能會讓你落在清單上某個數的「另一個名字」,這會弄混論證。只要每個被翻轉的數字都落在 1 到 8 的範圍內,就能保證 d 恰好只有一種小數展開,下面的比較也就乾淨了。
新的數與每一個條目都不同
關鍵的成果就在這裡。
d 在第一位小數與 r1 不同
d 的第一位數字被選為與 r1 的第一位數字不同。所以 。它們在第 1 位不同。
d 在第二位小數與 r2 不同
d 的第二位數字被選為與 r2 的第二位數字不同。所以 。它們在第 2 位不同。
對每個 n,d 在第 n 位小數與 rn 不同
依構造,d 的第 n 位數字與 rn 的第 n 位數字不同。由於兩個數只要在任何一個位置上有不同的數字就不相等,所以對你說出的任何 n,都有 。
這就是對角線的手法:d 被設計成與清單上的每個條目衝突,而且衝突的位置,正是每個條目最容易被攻破的地方,也就是它自己的對角線位置。
d 是 0 到 1 之間的實數,卻不在清單上
數 顯然是區間 (0, 1) 中的實數。但我們剛剛證明了它與 r1、r2、r3,以及每一個條目都不同。如果清單是完整的,d 就必須出現在其中某處。它沒有。所以清單不是完整的。
矛盾非常尖銳:我們假設清單是完整的,卻造出了一個不在其上的實數。這個假設必定是錯的。不可能存在 0 到 1 之間實數的完整清單。
這究竟說了什麼
數學家說自然數的基數是阿列夫零(用希伯來字母阿列夫書寫:第一個超限基數)。實數的基數則嚴格地更大,有時寫成 c,或寫成 2 的阿列夫零次方。是康托爾的論證確立了這兩種無限的大小並不相同。
康托爾發表這個結果時,引起了極大的爭議。有些同事把這個結果當成奇聞或錯誤而不予理會。它兩者都不是。它位於數學家思考集合、基數和實數線結構的基礎之中,並且直接連結到關於什麼可以計算、什麼不可計算的問題(另一個可證明為真的事物卻逼近形式系統極限的例子,也請參見古德斯坦定理中的證明)。
為什麼對角線有效
這個論證優雅之處在於它的具體性。你不是在猜測一個遺漏的數,也不是訴諸對實數有多大的模糊直覺。你是在讀出每個條目掌控著清單上的哪些位置,然後造出一個恰好在那個位置上避開每一個條目的數。
清單本身告訴你該往哪裡看。清單上的每個條目都交給你一個坐標,也就是它自己的對角線數字,而這個構造把這些坐標變成一個清單無法包含的數。
這種簡單是有欺騙性的。這裡完全不需要知道清單上的條目是什麼。清單上有哪些數、以什麼順序、如何被選出,都不重要。這個論證是通用的:挑任何一張實數清單,對角線構造都會產生一個不在那張清單上的實數。
它的禪意
康托爾的對角線論證屬於一個悠久傳統:那些感覺不應該成立的數學結果。你盯著這個證明,等著找出那個把戲、那個隱藏的假設、那個邏輯出現破綻的地方。但它們並不存在。這個證明恰如它看起來的那麼簡單。
它要求你接受的事,比證明本身更奇怪:「無限」不是單一的終點。整數和實數都是無限的,但它們在本質上以不同的方式無限。對角線論證就是那條分界線。
想進一步感受無限的集合可以有多奇怪,接下來可以看看無限小數的結構,或是極限如何運作,也就是數列永遠趨近某個值卻永遠達不到它的時候。對角線論證屬於同一個家族:對無限邊緣所發生之事的一種精確而耐心的觀察,在那裡,直覺需要靠證明來保持誠實。
無限不只有一種。這就是這個論證帶來的消息。而傳達這個消息的論證,只要半頁就寫得完。
常見問題
- 康托爾的對角線論證證明了什麼?
- 它證明 0 到 1 之間的實數是不可數的:不論清單造得多巧妙,都不可能包含那個區間內的每一個實數。實數的數量就是多於任何一張清單上的位置。
- 「不可數」是什麼意思?
- 如果你能把一個集合的每個成員與一個自然數(1、2、3……)配成一對,而且沒有任何遺漏,這個集合就是可數的。自然數、整數,甚至有理數都是可數的。實數則不是:它們的數量太多,無法放進任何這樣的一一對應中。
- 為什麼不能直接把漏掉的那個數加進清單?
- 你可以加,但這時對角線論證會再次作用在這張新的、更長的清單上,產生另一個漏掉的數。這個論證對任何清單都有效,不論多長或排得多巧妙,所以沒有辦法把清單修補成完整的。
- 為什麼翻轉時要避開數字 0 和 9?
- 有些實數有兩種小數表示法:0.4999…… 與 0.5000…… 是同一個數。如果你把某個數字翻轉成 0 或 9,可能不小心落在清單上某個數的「另一個名字」。避開 0 和 9 就能繞過這個技術細節,讓證明保持乾淨。
- 有理數也是不可數的嗎?
- 不是。有理數是可數的:你可以有系統地列出每一個分數 p/q,並給每一個分數一個自然數的編號,不留任何遺漏。康托爾的對角線論證針對的是實數,不是有理數。



