媽呀腦袋全空。暑假太頹廢了。我就盡可能長話短說了,寫這篇四個目的:1.當作熱身, 2.補讀另一篇文章的時候發現集合論忘得差不多了讀不懂所以回來複習順便寫
還有一點是這裡一向抱持著「零基礎沒關係!我教你!」的理念,所以如果我沒有要放棄模態邏輯系列,該寫的還是得寫。也或許我最後會放棄,可能因為失去動力什麼的。我覺得現在就有一點。
還有一個原因也是我一直以來寫這些的理由之一,這其實算是我一個大型筆記了。做得比我自己平時的小型筆記好太多了,我其實很依賴這些作為我的筆記。有時候我自己寫的筆記我自己都看不懂,但看這些我自己寫的哲普文章反而沒問題。
讀者可能會覺得這篇各個章節語氣不太一樣,判若兩人。正常,因為我不是按照章節順序寫的,也不是一次寫完的。還請多多包涵喔。
如果有和我一樣是文組出身的朋友,就當成來學一門語言吧。學習他們用什麼符號來表達什麼概念,慢慢習慣他們的語言表達。
那就不廢話了,開始聽我文組數學吧。
首先,集合和元素。一個集合(set)就想成是一個抽象的籃子,不管它裝到什麼,甚至沒有裝到都會是一個集合。元素(element)就是集合中的成員。
我們來舉個栗子:
A={a, b, c}
A是一個集合,它的成員abc就是它的元素。而這種元素屬於某個集合的關係我們表達成x∈A。如果某個元素不屬於某個集合則表達成x∉A。以上面那個集合為例就是a∈A,然後d∉A。
我們看下一顆栗子:
∅={}
這也是一個集合,叫做空集合(empty set)。顧名思義,它沒有裝到任何東西。用邏輯式表達就是∀x(x∉∅)。空集合可以用∅表示,如果你有讀過我的其他文章你應該認得這是來自一個古英語和古諾斯語的字母,把嘴巴擠成o型發「ㄜ」的音就是了,但數學上這叫空集合。當然你堅持要表達成{}也不是不行。
空集合呢,是任何集合的成員。任何集合當中都包含空集合。你不需要真的把它表達出來,但任何集合裡面都有一個空集合。以上面的A來說,雖然我沒有表達出來,但實際上∅∈A,也就是A={{}, a, b, c}
集合的成員當然也可以是一個集合!我可以有這種東西:
B={{a, b, c}, d, e, f, {g, h, i}}
我們說{a, b, c}∈B, {g, h, i}∈B。注意,屬於B的是{a, b, c}和{g, h, i},不是a, b, c, g, h, i。集合的集合我們當成一個單獨的元素來看待,所以不要說成a, b, c, g, h, i∈B哦!是{a, b, c}∈B和{g, h, i}∈B!
如何做出一個集合?我們用集合來表達一個群體,只要你有對象x和性質P你就能抓出一個群體,那怕裡面只有一個東西,甚至沒有東西,你都能做成一個集合。任何對象都可以是那個x,任何性質都可以是那個P,比方說x是所有穿藍色衣服的同學,這就是變成一個集合{x|x是穿藍色衣服的同學}。你可能會捕捉到曉明、小美、阿強之類的。或是你直接抓現實中的一個群體,然後用集合來表達他就行了。比方說我有一個籃子裡面有一根香蕉一顆蘋果一顆西瓜,那就是{香蕉, 蘋果, 西瓜}。
表達一個集合有兩種方式:
小機靈們想到了嗎,如果這個集合的成員是不屬於這個集合的成員如何?也就是{x|x∉x}。如果它不屬於這個集合,那麼它屬於這個集合,但是它不屬於這個集合,矛盾。如果它屬於這個集合,那麼它不屬於這個集合,矛盾。和哥德爾不完備性定理87%像。
順便提一下而已,第三次數學危機不是本文的主旨。反正之後大家就提出各式各樣的axion想要來處理這個問題,誕生出了各式各樣的集合論,比方說策梅洛-弗蘭克爾集合論之類的。
子集合的邏輯式是「∀x(x∈A→x∈B)」,意思是「對於所有x而言,如果x屬於A,那麼x屬於B」。
這邊我想特別提一個例子,我們先假設:
A={a, b, c}
B={{a, b, c}, d, e, f, {g, h, i}}
這時候我們不會說A⊆B哦,因為A的成員是a, b, c,但B沒有a, b, c啊!B有的是{a, b, c}。{a, b, c}不是a不是b不是c,{a, b, c}就是{a, b, c}。要記住,集合的集合我們當一個單獨的元素來看。所以當然,A不是B的子集合,它們是屬於的關係。在這個案例中,A∈B,但並非A⊆B。
如果兩個集合有完全相同的成員,它們就等同。你也可以用子集合的方式來理解,集合A和B等同就是A和B互為子集合。像是同樣的成員出現兩次啦,或是擺放順序不一樣啦,那些都沒關係。只要成員相同就等同。
{a, a, b}={a, b}={b, a}
{1, 2, 3}={3, 2, 1}={1, 1, 2, 3, 3, 2}
等同的邏輯式是「∀x(x∈A←→x∈B)」,意思是「對於所有x而言,x屬於A若且唯若x屬於B」。
好像不是很重要,但如果你一定要知道的話書上寫這叫extensionality(外延性)。就是說它們指涉到的都是同一個東西,所以不管你怎麼瞎搞它的成員也不會變吧?
一個冪集合(power set)就是一個集合的所有子集合蒐集而成的集合。A的冪集合就表達成𝒫(A)。比方說A={a, b, c},那麼𝒫(A)={{a}, {b}, {c}, {a, b}, {b, c}, {a, c}, {a, b, c}}。當然,還有空集合。我就不寫出來了。
如果加上空集合,任何冪集合的成員都有2^n個。n是你原本集合的成員數。以A來說,𝒫(A)的成員數量就有2^3個。
字串(string)是:
拿A={a, b, c}來說好了,abbcba就是一個字串,cccccccbabaaabb也是一個字串。當然,a也是一個字串,b也是一個字串,c也是一個字串,aa、bb、cc也都是。基本上隨便你排,只要你不要不小心排出一個無限的序列就好了,請維持在有限的序列。
字串的長度表達成len(x)=n。拿0100111來說好了,len(0100111)=7。大概這種感覺。
A基本上就是我把從集合A的元素做成的字串通通丟在一起,丟在一個集合裡面,這個集合就叫A*。
隨便抓隨便組啊,你可以任意使用A中的任何的元素組成任何字串,甚至是空字串也行。你完全可以看心情想抓多少個字串就抓多少個,一個兩個三個四個通通隨便你,但最後丟在A*裡面的時候不可以只有空字串就是了。可以有空字串,但不可以只有空字串。
我隨便舉個例子:
A={0, 1}
A*={0, 1, 00, 0001011, 011110101100}
這就是一個A*。
還有一點要注意就是不要往A*裡面丟入無限個字串讓它變成無限集合就好。
A^𝜔呢......基本上就是我有一個集合A,我拿A中的元素用無限多種排列組合,做出無限多個字串,然後我再把這些字串丟進一個集合,這就是一個A ^ω。
具體來說A ^ω要怎麼表達?你可以表達成:
A={0, 1}
A^ω={𝛬, s1, s2, s3, ..., sn}
s1=0101010101......
s2=0011001100......
s3=1110100011......
...
sn
大概是這樣。反正以此類推就好了。
哦,當然地,任何一個s的長度都是len(sn)=∞。之前我們說每一個字串都得是有限的,你不可以選擇出一個無限長的字串。但這件事唯獨在這裡不適用。A^ω就要無限長的字串。
聯集(union):集合A和B所有的元素組成的集合就叫做A和B的聯集,表達作「A∪B」,邏輯式是「A∪B={x|x∈A∨x∈B}」,意思是「A∪B={x|x屬於A或者x屬於B}」。
一些聯集常用的公理:
那交集是什麼?交集就是兩個集合重疊在一起的那一塊:
就是塗黑的那一塊。
交集(intersection):由集合A和集合B共有的元素所組成的集合,表達作「A∩B」,邏輯式是「A∩B={x|x∈A∧x∈B}」,意思是「A∩B={x|x屬於A以及x屬於B}」。
接下來我們要討論的例子很特別,那就是當集合的成員是集合的時候。當集合的成員是集合,也就是集合的集合的時候,我們當然也可以做聯集和交集!但我們做的是集合中的那些集合的聯集與交集。
我覺得指標集是一個有點容易搞矇的概念,至少我的教科書是讓我看得很矇。敢不敢不要寫得這麼爛。我們慢慢來,好嗎?
指標集(index set)同樣是要來做聯集或交集。指標集是你設定一個集合I,並且你有一些集合A1, A2, ...An。我用I來表達我要做聯集交集的對象是擁有那些元素的集合。你就想,老師發給每個同學一人一張字母的卡片,然後老師再自己抽出一組字母卡,然後要手上有和老師抽到的字母相同的字母卡的同學站上前來圍在一起。老師手上那組字母卡就是I,圍在一起的同學們就是那個指標集。
我們先來設定幾個集合吧:
I={1, 2, 3}
A1={0, 1, 2, 3, 4, 5}
A2={-3, -2, -1, 0, 1, 2}
A3={-4, -2, 0, 2, 4}
指標集的聯集:表達方法我會把圖片放在下面,因為我實在不知道怎麼用電腦打出來。
這在說什麼呢?就是在說我們今天要做一個聯集,聯集對象是所有Ai。誰是Ai?Ai是所有擁有i中的任意元素的集合。那個i的作用就是一個索引,好像你在查字典一樣。我要的就是所有包含i的任意元素的集合收集起來做成聯集。所以回到我們剛剛設定的集合,我們剛剛設定i={1, 2, 3},只要A1, A2, A3任何一個集合擁有i的任意一個元素,那怕僅僅只有一個,它就是我們要聯集的對象。所以根據我們剛剛的設定,A1, A2, A3都是我們要聯集的對象。
因此呢,⋃︁ i∈I Ai={-4, -3, -2, -1, 0, 1, 2, 3, 4, 5}。大家要記住那個i∈I是在⋃︁下面。電腦打不出來我才這樣寫的,你們知道那個i∈I放在哪就好。
說到底那個i∈I到底是什麼意思?你問倒我了。反正知道怎麼用就好,誰也不講那什麼意思到底在幹嘛我能怎麼辦?幹。
指標集的交集:表達方法我一樣會把圖片放在下面。
一樣很簡單,只要A1, A2, A3任何集合裡面有i的任何元素就是我們要交集的對象。當然,這次也是A1, A2, A3都中。所以說,⋂︁ i∈I Ai={0, 2}。
一個集族(family of sets)是什麼?就是:
比方說A={{1, 2}, {3, 4}}就是一個集族。
當集族的成員之間沒有共同元素的時候,我們會說一個集族是pairwise disjoint的。你要理解成∩A=∅也行啦。我上面給的A就是一個例子。A的成員是{1, 2}和{3, 4},{1, 2}和{3, 4}之間沒有共同的元素,所以A是一個pairwise disjoint的集族。書上說這也叫這個集族是mutually exclusive的。
集合劃分(partition)是什麼呢?呃...基本上就是把一個集合拆開然後再放進另一個集合。就像是我把盤子上的蛋糕切成n塊然後再放到其他盤子上,再把這些盤子放到一個大盤子上放一起。我把集合A={1, 2, 3}的集合成員抓出來放到集合裡,可以是{1}{2}{3},也可以是{1, 3}{2},也可以是{1}{2, 3}......吧啦吧啦,以此類推。你甚至可以有{1, 2, 3},怎麼分隨便你,怎麼玩都可以。然後我再丟進一個集合裡面,比方說{{1}{2, 3}}或{{1, 2, 3}}之類的,這個集族就是A的集合劃分。就是這種感覺,嗯。
集合劃分需要符合三個條件:
除此之外真的就隨便你。
小機靈蛋們猜到了嗎?如果S是A的集合劃分,那麼∪S=A。
一個比較沒有那麼嚴格一點的概念叫做窮盡(exhaustive),你要叫完全窮盡(collectively exhaustive)也可以。
窮盡是指S是由A的子集合構成的集族。不非得是冪集合,但當然冪集合也是一種,總之任何由A的子集合構成的集族S,只要它∪S=A,那麼S就是窮盡的。
先前我們講交集求的是兩個集合共同都有的元素,差集(difference)求的是A有但B沒有的,我們表達成「A\B」。
這樣。我們求塗黑的那一塊。
邏輯式也很直白地就是「A\B={x∈A|x∉B}」,表達A\B的成員是屬於A的x且具備不屬於B的性質。差集A\B你也可以寫成A-B。
不免俗地我們來舉顆栗子吧:
A={1, 2, 3, 4}
B={3, 4, 5, 6}
A\B={1, 2}
我有1, 2, 3, 4, 5, 6, 7,一共七個數字。我把它們放到籃子裡。現在我再把2, 4, 6單獨抓出來,再放進另外的籃子,請問原本的七個數字剩下什麼啊?
補集(complement)是什麼呢?補集我們表達成「A^c=U\A」,顧名思義,是得用差集來理解的概念。基本上就是A⊆U,然後我要求它們相差的那些成員這樣。
首先我有一個全集(universal set),表達成「U」。這個全集可以是任何集合啦它只是有一個很酷的名字而已。說真的你也不用真的表達成U,你就A和B⊆A,然後B^c=A\B也行,你只要知道那個A代表了全集U就好。反正我們就設定U={1, 2, 3, 4, 5, 6, 7}好了,然後我們要一個A⊆U,就當成A={2, 4, 6}好了。這樣一來我們可以說A^c={1, 3, 5, 7}。A^c就是U和A之間相差的那些成員,就是這麼簡單。
形象化一點,補集的概念就如圖:
這樣。大概是這種感覺。
因為就是求被包在大圈圈裡面的小圈圈和大圈圈之間相差的成員,所以complement,補集你也可以翻譯成餘集。看和你討論的夥伴比較習慣怎麼叫,或你自己叫開心就好。
映射(mapping or function)是一個很general的概念。我有兩個集合A和B,我將A中的元素指定給B中的元素,這就叫做映射。就有點像......舉來來說A中的元素,比方說x好了,x在B中被指定了一個對應的元素,這個元素可能是y,然後我就說x對應y。這種xy的對應關係就是映射。
映射的起點我們通常稱為定義域/論域(domain),映射的終點我們稱為對應域/值域(range)。
從集合A映射到集合B我們這樣表達:
我不知道怎麼用電腦打出這個,只好用寫的。
x∈A映射到y∈B這樣表達:
然後映射大概是這種感覺:
他不一定要寫成公式,任何只要你在一個群體中將群體成員指定到另一個群體的成員的行為都叫映射。有點像是國小的時候寫的連連看,大概這種感覺:
這就是一個映射。當然你想怎麼對怎麼指派都行,我只是舉顆栗子。
函數是不是一種映射啊?我們一樣以定義域的元素作為輸入,對應域的元素作為輸出嘛。我們將定義域的元素輸入函數,得到的輸出值就是對應域的元素。
既然函數就是以拿定義域來對應對應域,函數當然也是一種映射。
函數我們又可以再做個分類:
我們把之前那張範例圖請回來,我們來談談映射實際上怎麼操作吧。
就是這張。
以上圖為例,如果a映射到1,我們也會說1就是f(a)。沒毛病吧?f(a)=1,那1就是f(a)啊。f(a)既是1的代稱也是一個函數。反正你往f(x)裡面丟進什麼,它的輸出就是x映射的對象,同時f(x)也直接當作對應域中被x映射到的對象的代稱。
所以技術上來說上圖也可以理解成這樣:
當然我只是示意一下,拜託不要真的這樣畫。
我也可以先把定義域的元素收集成集合再丟進函數,比方說f({a, c})={1},因為a和c都對應1嘛。當然如果你給f({a, b, c})的話,那f({a, b, c})={1, 2}。
你先收集成集合再丟進函數,輸出也會是一個集合。這很重要。真的非常重要。超級重要。
當然你要把a單獨收集成集合作成f({a})={1}也行,不一定要f(a),你要f({a})當然也行。我抓f(b)的話就是f(b)=2;抓f({b})的話就會是f({b})={2}。
有時候比較尷尬的是,你已經設定完一組映射了但你突然又想換別種方式射,但你不想就這樣擦掉原本的那種射法,你可以再設定一個g(x)=y或者h(x)=y之類的,以此類推。
還有一點很重要很重要很重要,我們會預設映射函數是全函數,而不是部分函數。定義域全部都要射出去啦。這點我們等到談集合的基數的時候再來講。
像與像集都叫image。
一個逆像(preimage)又是什麼呢?先前我們提到我們可以假設集合S⊆A映射到了集合B,並且在B中又因此形成一個R⊆B稱為im(f),也就是S的像集。那反過來,我們當然也可以在對應域B中抓出一塊,然後反推定義域A中是什麼原像被指派到了這裡。我抓的這塊就叫W好了,我用W回推過去的原像的集合表達成「f^-1(W)」。
逆像的邏輯式是「f^-1(W)={x∈A|f(x)∈W}」,表達f^-1(W)是屬於A的x且這些x具備它的像在W的性質。
映射更具體地又分成三類:
我就直接寫成「->」了。耐心看到這裡的觀眾老爺們應該不需要我解釋為什麼了。
哦,然後不要和我一樣傻。我們在講單射、滿射和對射的時候是看整個模型,看整個A和B的映射狀況,而不是看單獨元素的映射狀況。