【邏輯學】集合論(上):集合是什麼?

閱讀時間約 23 分鐘

前言

媽呀腦袋全空。暑假太頹廢了。我就盡可能長話短說了,寫這篇四個目的: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是穿藍色衣服的同學}。你可能會捕捉到曉明、小美、阿強之類的。或是你直接抓現實中的一個群體,然後用集合來表達他就行了。比方說我有一個籃子裡面有一根香蕉一顆蘋果一顆西瓜,那就是{香蕉, 蘋果, 西瓜}。

表達一個集合有兩種方式:

  1. 列舉法:把集合的成員列舉出來。e.g. {a, b, c}。有時候你的成員真的很多你也可以大概意思意思寫成{a1......an}。
  2. 特性刻劃法:用一段描述來表達這個集合,告訴大家集合的成員就是符合這段描述的對象這樣。e.g. {x|x 是所有大於0,小於5的正整數}。「|」左邊的地方表達的是這個集合的成員,以上面的例子來說就是x。當然這個x是一個variable啦。「|」的右邊則是你的描述,告訴大家擁有什麼樣性質的東西是這個集合的成員,告訴大家這個集合的成員是擁有P性質的x。有時候「|」的左邊會限定論域,比方說{x∈A|(x)φ}表達這個集合的成員是集合A中擁有φ性質的x。「|」右邊的描述也不一定得是一段文字,也可以寫成{x∈A|x∈W}。W就當成A的子集合好了。如果不知道沒關係,等一下會說。這邊就先知道特性刻劃法怎麼使用就好。我知道這例子舉得很爛啦,隨便啦。

羅素悖論

小機靈們想到了嗎,如果這個集合的成員是不屬於這個集合的成員如何?也就是{x|x∉x}。如果它不屬於這個集合,那麼它屬於這個集合,但是它不屬於這個集合,矛盾。如果它屬於這個集合,那麼它不屬於這個集合,矛盾。和哥德爾不完備性定理87%像。

順便提一下而已,第三次數學危機不是本文的主旨。反正之後大家就提出各式各樣的axion想要來處理這個問題,誕生出了各式各樣的集合論,比方說策梅洛-弗蘭克爾集合論之類的。

一些需要記住的集合

raw-image

子集合與真子集

  1. 子集合(subset):如果集合A的元素集合B都有,我們說A是B的子集合。表達成「A⊆B」。
  2. 真子集(proper subset):A是B的子集合但B不是A的子集合,也就是A的元素B都有,但有些B的元素A沒有,那麼A是B的真子集。表達成「A⊆B」但是⊆的底線要畫一撇劃掉。我上哪都找不到那樣的符號我也只能用講的。或者也可以表達成「A⊂B」。我應該之後都會用「⊂」表達真子集。

子集合的邏輯式是「∀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。

行間:定義

  1. ∀x(x∈A→φ)簡寫成(∀x∈A)φ:∀x(x∈A→φ)表達「對於所有的x而言,如果x屬於A,則x具有φ性質」;(∀x∈A)φ表達「所有屬於A的x擁有φ性質」。
  2. ∃x(x∈A∧φ)簡寫成(∃x∈A)φ:∃x(x∈A∧φ)表達「對於部分x而言,x屬於A且擁有φ性質」;(∃x∈A)φ表達「部分屬於A的x擁有φ性質」。
  3. ∀x(x∈A→x∈B)簡寫成(∀x∈A)x∈B:∀x(x∈A→x∈B)表達「對於所有x而言,如果x屬於A,那麼x屬於B」;(∀x∈A)x∈B表達「所有屬於A的x擁有x屬於B的性質」。
  4. ∃x(x∈A∧x∈B)簡寫成(∃x∈A)x∈B:∃x(x∈A∧x∈B)表達「對於部分x而言,x屬於A並且x屬於B」;(∃x∈A)x∈B表達「部分屬於A的x擁有屬於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)是:

  1. 拿字母或數字用任意數量用任意方式排列出來的序列。
  2. 是有限序列。

拿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*裡面的時候不可以只有空字串就是了。可以有空字串,但不可以只有空字串。

我隨便舉個例子:

A={0, 1}

A*={0, 1, 00, 0001011, 011110101100}

這就是一個A*。

還有一點要注意就是不要往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}」。

一些聯集常用的公理:

  1. A∪B=B∪A
  2. A⊆A∪B 並且 B⊆A∪B
  3. A∪∅=A
  4. A∪B=A←→B⊆A(雙箭頭表達:if and only if)
  5. 如果A⊆C而且B⊆C,那麼A∪B⊆C
  6. A∪(B∪C)=(A∪B)∪C

交集

那交集是什麼?交集就是兩個集合重疊在一起的那一塊:

raw-image

就是塗黑的那一塊。

交集(intersection):由集合A和集合B共有的元素所組成的集合,表達作「A∩B」,邏輯式是「A∩B={x|x∈A∧x∈B}」,意思是「A∩B={x|x屬於A以及x屬於B}」。

集合的集合的聯集交集

接下來我們要討論的例子很特別,那就是當集合的成員是集合的時候。當集合的成員是集合,也就是集合的集合的時候,我們當然也可以做聯集和交集!但我們做的是集合中的那些集合的聯集與交集。

  1. 集合的集合的聯集:就是「{x|x belong to an element of A}」。當然這邊的element of A是指集合裡面的集合。因為很重要所以再講一次,集合裡面的集合當成一個單獨的元素來看待。集合的集合的聯集我們寫成「⋃︁A」,比方說A={{a, b, e}, {a, c, d}},那麼⋃︁A={a, b, c, d, e}。
  2. 集合的集合的交集:就是「{x|x belong to every element of A}」,我們寫成「⋃︁A」。比方說A={{a, b}, {a, c}, {a, d}},那麼⋂︁A={a}。

指標集

我覺得指標集是一個有點容易搞矇的概念,至少我的教科書是讓我看得很矇。敢不敢不要寫得這麼爛。我們慢慢來,好嗎?

指標集(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}

指標集的聯集:表達方法我會把圖片放在下面,因為我實在不知道怎麼用電腦打出來。

raw-image

這在說什麼呢?就是在說我們今天要做一個聯集,聯集對象是所有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到底是什麼意思?你問倒我了。反正知道怎麼用就好,誰也不講那什麼意思到底在幹嘛我能怎麼辦?幹。

指標集的交集:表達方法我一樣會把圖片放在下面。

raw-image

一樣很簡單,只要A1, A2, A3任何集合裡面有i的任何元素就是我們要交集的對象。當然,這次也是A1, A2, A3都中。所以說,⋂︁ i∈I Ai={0, 2}。

集族

​一個集族(family of sets)是什麼?就是:

  1. 一個集合它的成員都是集合。
  2. 一個集合它的成員只有集合。

比方說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的集合劃分。就是這種感覺,嗯。

集合劃分需要符合三個條件:

  1. 我們在劃分的時候不把空集合劃進來。
  2. 原始集合A的每一個元素(除了空集合)都要被劃進來。
  3. extensionality在這裡沒用,我們做出集合劃分的這個集族必須是pairwise disjoint的。我們在劃分的時候不允許元素重複。你可以有{1}{2, 3},但不可以有{1, 2}{2, 3}。

除此之外真的就隨便你。

小機靈蛋們猜到了嗎?如果S是A的集合劃分,那麼∪S=A。

窮盡

一個比較沒有那麼嚴格一點的概念叫做窮盡(exhaustive),你要叫完全窮盡(collectively exhaustive)也可以。

窮盡是指S是由A的子集合構成的集族。不非得是冪集合,但當然冪集合也是一種,總之任何由A的子集合構成的集族S,只要它∪S=A,那麼S就是窮盡的。

差集

先前我們講交集求的是兩個集合共同都有的元素,差集(difference)求的是A有但B沒有的,我們表達成「A\B」。

raw-image

這樣。我們求塗黑的那一塊。

邏輯式也很直白地就是「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之間相差的那些成員,就是這麼簡單。

形象化一點,補集的概念就如圖:

raw-image

這樣。大概是這種感覺。

因為就是求被包在大圈圈裡面的小圈圈和大圈圈之間相差的成員,所以complement,補集你也可以翻譯成餘集。看和你討論的夥伴比較習慣怎麼叫,或你自己叫開心就好。

映射

映射

映射(mapping or function)是一個很general的概念。我有兩個集合A和B,我將A中的元素指定給B中的元素,這就叫做映射。就有點像......舉來來說A中的元素,比方說x好了,x在B中被指定了一個對應的元素,這個元素可能是y,然後我就說x對應y。這種xy的對應關係就是映射。

映射的起點我們通常稱為定義域/論域(domain),映射的終點我們稱為對應域/值域(range)。

從集合A映射到集合B我們這樣表達:

raw-image

我不知道怎麼用電腦打出這個,只好用寫的。

x∈A映射到y∈B這樣表達:

raw-image

然後映射大概是這種感覺:

raw-image

他不一定要寫成公式,任何只要你在一個群體中將群體成員指定到另一個群體的成員的行為都叫映射。有點像是國小的時候寫的連連看,大概這種感覺:

raw-image

這就是一個映射。當然你想怎麼對怎麼指派都行,我只是舉顆栗子。

函數

函數是不是一種映射啊?我們一樣以定義域的元素作為輸入,對應域的元素作為輸出嘛。我們將定義域的元素輸入函數,得到的輸出值就是對應域的元素。

既然函數就是以拿定義域來對應對應域,函數當然也是一種映射。

函數我們又可以再做個分類:

  1. 全函數(total function):定義域中所有的元素都有輸出值。換句話說,定義域中所有的元素都有映射到對應域。對應域並非所有元素都有被映射到沒關係,因為定義域的元素可以重複映射對應域的同一個元素嘛,比方說a和b都射到1之類的。只要定義域所有元素都有射出去就好。
  2. 部分函數(partial function):並非所有在定義域中的元素都有輸出值,也就是並非所有在定義域中的元素都有映射過去對應域。同樣我們不管對應域有沒有都被射到。

映射實踐

我們把之前那張範例圖請回來,我們來談談映射實際上怎麼操作吧。

raw-image

就是這張。

以上圖為例,如果a映射到1,我們也會說1就是f(a)。沒毛病吧?f(a)=1,那1就是f(a)啊。f(a)既是1的代稱也是一個函數。反正你往f(x)裡面丟進什麼,它的輸出就是x映射的對象,同時f(x)也直接當作對應域中被x映射到的對象的代稱。

所以技術上來說上圖也可以理解成這樣:

raw-image

當然我只是示意一下,拜託不要真的這樣畫。

我也可以先把定義域的元素收集成集合再丟進函數,比方說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。

  1. 像:被指派給x∈A的y∈B就叫做x的像。
  2. 像集:你把這些像通通收集起來,這個B的子集合就是像集,表達成「im(f)」。舉例來說如果f({1, 2, 3})={a, b},那麼im(f)={a, b}。當然你可能會突然想換種射法,可能就會變成im(g)={a}或是im(h)={b}之類的。
  3. 原像(inverse image):x映射到y,y是x的像,x就是y的原像。
raw-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的性質。

raw-image

單射、滿射與對射

映射更具體地又分成三類:

  1. 單射(injection)/一對一映射(one-to-one function):意思是從定義域映射到對應域不能重複射到同一個元素。定義域的元素被指定到的對應域的元素得是一對一的,不同的元素要對到不同的元素,不能有一個對應域的元素被重複對到。x指派到1之後,1就不能被重複選到的意思。e.g. A={a, b}, B={1, 2, 3}, a->1, b->2.
  2. 滿射(surjection)/映成映射(onto function):對應域中所有的成員都有被映射到就是滿射,定義域的成員有沒有全部射出去沒關係,我們只問對應域有沒有全部都被映射到。e.g. A={a, b, c, d}, B={1, 2}, a->1, b->2, c->2.
  3. 對射(bijection):同時單射又滿射。e.g. A={a, b, c}, B={1, 2, 3}, a->1, b->2, c->3.

我就直接寫成「->」了。耐心看到這裡的觀眾老爺們應該不需要我解釋為什麼了。

哦,然後不要和我一樣傻。我們在講單射、滿射和對射的時候是看整個模型,看整個A和B的映射狀況,而不是看單獨元素的映射狀況。

Snowberry
Snowberry
Proud defenders of Azeroth, hearken to me!
留言0
查看全部
發表第一個留言支持創作者!
Snowberry 的其他內容
【舊文搬運】一階邏輯簡介
閱讀時間約 25 分鐘