寫在前面
今天上的離散數學做了一些有意思的證明,這里放一下
集合的大小,我知道
在對付有限集合時,我們很容易就能比較兩個集合的大小(只需要數一數各自有多少個元素就行了)。但是當這個問題拓展到無限集合時,我們往往不能簡單地給出答案。原因是什么呢?
問題1:證明\(|\mathbb{N}|\)=\(|\mathbb{E}|\),其中\(\mathbb{E}=\left\{2n|n\in\mathbb{N}\right\}\)
定義映射\(f:\mathbb{N}\mapsto\mathbb{E}\)為\(f(x)=2x\),通過這樣一個操作我們可以發現\(\forall x\in\mathbb{N},\exist y\in\mathbb{E},f(x)=y. And \ \forall y\in\mathbb{E},\exist x\in\mathbb{N},f(x)=y\)
也就是說,我們建立起了一個從自然數到偶數的雙射,任意一個偶數都唯一確定對應一個整數,反之亦然。
這時,我們就說這兩個集合的大小相等,也稱他們是等勢的
上面的這個例子比較簡單,我們可以接着看下一個例子
問題2:證明\(|\mathbb{R}|=|[0,1]|\)
這個問題乍一看是反直覺的,但是有了上面問題的鋪墊我們可以知道一件事情:一個無限集是可以和它的一個真子集等勢的。
先說說我的做法。一個有趣的證明是這樣的:
我們把區間\([0,1]\)卷起來形成一個半圓,不難得到它的半徑\(r=\frac{1}{\pi}\)
在數軸上取一個點,不妨就取0,過0作一直線垂直於數軸,在這條直線上取一點\(A\)使得點到數軸的距離恰好為r
以點A為圓心,作半圓與數軸相切,不難得到這個半圓的長度恰好為1
在數軸上任取一點\(D(x,0)\),連接\(D\)、圓心\(A\),交半圓於\(E\)
如上圖,可以發現,數軸上的任意一點都唯一對應着半圓上的一個點,而半圓上的任意一點(除去兩端)也恰好唯一地對應了數軸上的一點
因此我們斷言\(|(0,1)|=|\mathbb{R}|\)
等等,你不是要證明\(|[0,1]|=|\mathbb{R}|\)嗎
是的,所以我們接下來要做的是證明\(|[0,1]|=|(0,1)|\)
如何下手?考慮這樣集合\(A=\left\{\frac{1}{2},\frac{1}{4}...\frac{1}{2^n}...\right\}\)和\(B=\left\{0,1,\frac{1}{2},\frac{1}{4}...\frac{1}{2^n}...\right\}\)
注意!這里的\(A\)和\(B\)都是無限集
不難發現,我們將A和B分別一一列舉了出來,也就是說他們是可列集合,也叫可數集,這樣的兩個集合是可以一一對應的,我們只需要把\(A\)中的第i個元素映射到\(B\)中的第i個元素,這樣就造出了兩個集合間的一個雙射
我們又注意到\([0,1]\backslash B=(0,1)\backslash A\),這一點是非常顯然的,那么就有\(|[0,1]\backslash B|=|(0,1)\backslash A|\)
這樣我們把A和B分別劈成了兩半,使得這兩半之間存在雙射,所以只需要把兩個互不相干的映射並在一起就可以得到\(f:(0,1)\mapsto[0,1]\)
故\(|\mathbb{R}|=|[0,1]|\),並且易得\(\forall x,y\in\mathbb{R} 若x\neq y,|[x,y]|=|(x,y)|=|(x,y]|=|[x,y)|=|\mathbb{R}|\)
這個證明看起來非常直觀,但是關鍵步驟缺乏嚴密性。畢竟我們無法嚴謹地說明把線段彎曲后它和原來仍然是一樣的(笑
但是觀察這個證明,我們發現這等價於利用函數\(f(x)=\tan\left(\pi \left(x-\frac{1}{2}\right)\right)\),將\(\mathbb{R}\)映射到\((0,1)\),並且由單調性可知這樣的映射是雙射,所以上述證明可以用更加嚴謹的方式進行說明,是沒有問題的。
問題3:證明\(|\mathbb{R}^2|=|\mathbb{R}|\)
這個平方指集合和他自身的笛卡爾積,即設\(A\)為一非空集合,則\(A^2=\left\{(x,y)|x\in A,y\in A\right\}\)
由前一題可知,\(|\mathbb R|=|[0,1)|\)
於是我們只需要證明\(|[0,1)|=|[0,1)^2|\)
觀察可知,\([0,1)\)中的實數都是整數部分為0的小數,我們可以構造這樣一個映射
其中\([x]\)表示取\(x\)的整數部分,不難發現這樣就是在把\(a、b\)的每一位交替插在一起,形成一個新的實數
這個構造過程是可逆的,並且是一個雙射
這個結論能說明什么呢?我們在二維平面上的點和數軸上一樣多!很奇妙
並且這個結論是可以推廣的。也就是\(\forall n\in \mathbb{N},|{\mathbb R}^n|=|\mathbb R|\)
而\(|{\mathbb R}^{+\infin}|=|\mathbb R|\)也是可以得出的,我們只需要按行列出實數的每一位,然后沿着反對角線取數字構造就可以了
問題4:證明\(|2^{\mathbb{N}}|=|\mathbb{R}|\)
這個冪次的含義是自然數的冪集,也就是自然數所有子集形成的集合。
由上一問可知,我們只需要證明\(|2^{\mathbb{N}}|=|[0,1)|\)
而對於任意一個\(\mathbb N\)的子集\(S\),我們都可以用一個無限長度的二進制串來唯一表示,其中若第i位為0,代表\(i\not\in S\),否則\(i\in S\)
於是立刻就可以想到,我們只需要把\([0,1)\)中的實數化成二進制小數,就可以獲得無線多個互不相同的任意長的二進制串(取小數點后的部分)
例如,一個實數\(a=0.1101100000...\),唯一地表達了集合\(S=\left\{1,2,4,5\right\}\)
但是,這樣的表示是完美的嗎?
並不!考慮一個無限循環小數\(a=0.011000\dot{1}\),我們可以發現它其實等價於有限小數\(b=0.011001\),也就是說,我們這樣存在一個實數映射到了兩個不同的\(\mathbb N\)的子集。當然這個很好解決,我們只需要規定若一個數能表示成有限小數,那么我們絕不考慮它的無限小數表示法。但是,我們無法通過這樣的映射找到一個逆映射,使得\(\mathbb N\)中的每一個子集都能在\([0,1)\)中找到唯一對應的實數(例如,我們把從9開始往后的所有正整數都選出來,組成的集合就不能映射到一個實數上,因為這是一個無限小數,而前面我們規定了不取這種寫法)
怎么辦呢?這里有一個比較奇妙的做法。考慮這樣一個事實,我們在第一問證明了\(|\mathbb N|=|\mathbb E|\),因此我們似乎只需要證明\(|\mathbb E|=|2^{\mathbb N}|\)就可以了!
觀察\(\mathbb E\)的性質,我們可以發現對它做上述構造后,是不存在與另一個有限小數相等的無限循環小數的!為什么呢?因為這里都是偶數,因此最多出現\(0.00010101010101...\)這樣的循環小數
因此這個構造就成立了!我們就成功地證明了\(|2^{\mathbb N}|=|2^{\mathbb E}|=|[0,1)|=|\mathbb R|\)
小小的總結
離散數學這門課聽起來還是很有意思的,但是真正要做題的時候就很懵逼了,算是很需要idea的學科
經過了幾次課大概可以感受到離散數學主要研究的問題無非就是圍繞着集合開展,並且多和無限扯上關系。因為和無限扯上了關系,我們初等數學中的一些結論就變得不那么顯然和可拓展了,原本的直覺也會失效。
希望能活過大一的離散數學(一),然后看看能不能活過離散(二)吧(希望)