公理集合论基础(上):空集和罗素悖论
预告
读完本文,你将会了解 ZF 公理集合论的前三个公理——“存在公理”、“外延公理”以及“分离公理模式”,并用它们解决罗素悖论,以及定义空集。
前言
我们常听到“集合论是现代数学的基础”这样的说法。在很多人看来,中学所学的集合论就是一些集合和简单的运算,怎么会是基础呢?要理解这一点,我们必须了解集合论是如何公理化的。
自欧几里得《几何原本》以来,公理化的观念深入人心。公理化的意义无需赘言。微积分的公理化解决了第二次数学危机(贝克莱对牛顿微积分中“无穷小”的责难);集合论的公理化则解决了第三次数学危机。然而,与古希腊的那种传统公理化方式不同,现代数学的公理化脱离了自然语言,而建立于符号语言上。为什么要这样做?
在弗朗西斯·培根的偶像理论中,“市场偶像(Idol of the market place)”描述了自然语言的模糊性和歧义性所导致的假象。这是追求严谨性的数学应该避免的。第三次数学危机使人们意识到,用自然语言描述数学对象是危险的。无论你的自然语言看似多么密不透风,也有可能给谬误以可乘之机。
解决这个问题的唯一办法,就是抛弃自然语言,转而使用符号语言。这些符号语言构成现代逻辑学的公理系统。研究这些符号语言的学科就叫做数理逻辑(Mathematical logic)。
本文旨在梳理人们是如何利用符号语言,将现代数学建立在集合论的基础之上的。因此,在介绍公理集合论之前,我们需要介绍数理逻辑,以及最基本的两种逻辑系统:命题逻辑(Propositional Logic)系统和一阶逻辑(First-Order Logic)系统。
数理逻辑简介
自然语言之所以存在漏洞,一部分是因为,它是由人的心智创造并解读的。而人的心智“不是白板(tabula rasa)”。由于隐含的扭曲,它不是一个完美的能够完全接受世界中形象的平面,而是一个弯曲的镜子。换言之,人的心智天生就容易被欺骗。
符号语言之所以取得成功,就是因为它脱离了人的心智,只留下了形式化的规则。理论上,计算机也可以使用这样的语言进行推理,而不会出错。这是因为,符号语言没有模糊性和多义性,一切都是严格确定的。我们只需以适当的方式确定组织符号的规则,使得从它们出发,就可以重建我们所熟悉的数学。这样一来,数学就建立在了坚实的基础上,绝不可能出错。在这样严密的审视之下,我们不会留给“罗素悖论”这类谬误以任何可乘之机。
那么这些符号规则从哪来?答案是数理逻辑。**正如我们希望用集合论公理决定“如何定义新的集合是合法的”,数理逻辑决定“符号如何构成公式(也就是一串符号)是合法的”。**本质上,数学中的定义,定理,证明,在底层都是一串串符号,正如计算机的底层都是1和0。
像 “p→p” 这样显然的逻辑规则,在数理逻辑中是需要证明的。你可能觉得从语义上可以直接看出这一点,但我们现在希望从语法的角度,而非语义的角度,去研究各种各样的式子以及它们的合法性。
更具体地说,语义学负责研究人类的心智如何阐释(Interpret)一串符号,或者说一串符号如何借助人类的心智来指称现实世界的各种实体。但数理逻辑研究的并不是语义,而是语法。语法的作用,正如前文所说,是判断**“符号如何构成公式(也就是一串符号)是合法的”**。换句话说,语法指的是我们用符号来生成公式(也就是一串符号)的规则。为了建立坚实的符号语言系统,我们应该单独研究语法。这就是数理逻辑的初衷。
**数理逻辑是关于逻辑的学科,而不是“关于数学和物理的逻辑”。**数理逻辑是一门已经发展成熟的学科。集合论就建立在数理逻辑中的一阶逻辑的基础之上。
命题逻辑
$\neg a$ 表示“并非 $a$ ”。如果 $a$ 是真的,那么 $\neg a$ 是假的,反之亦然。换言之, $\neg$ 的真值表为
| a | T | F |
| ¬a | F | T |
其中 T 表示真(True),F 表示假(False)。
$a \vee b$ 表示“ $a$ 或 $b$ ”。
$a \wedge b$ 表示“ $a$ 且 $b$ ”,它等价于“ $\neg(\neg a\vee \neg b)$ ”。它们的真值表是很容易的。
$a\rightarrow b$ 表示“若 $a$ 则 $b$ ”,或“ $a$ 蕴涵 $b$ ”。它的真值表如下
| a→b | a | ¬a |
| b | T | T |
| ¬b | F | T |
“a”那一列不难理解:真命题能推出真命题,不能推出假命题。而“¬a**”那一列似乎表明“假命题蕴涵一切命题”。为什么要这么规定?**详情可见:
另外,在后文的各种例子中,读者也可以体会到为什么要规定“假命题蕴涵一切命题”。
【选读 1】“ $a\rightarrow b$ ”等价于“ $(\neg a)\vee b$ ”,为了看出这一点,你只需要把四种情况代入真值表验证。
具体来说,当 $a$ 为真的时候, $\neg a$ 为假,那么“ $(\neg a)\vee b$ ”的真值就取决于 $b$ 。当 $a$ 为假的时候,$\neg a$ 为真,那么不论 $b$ 的真值如何,“ $(\neg a)\vee b$ ”都是真的。可见,“ $a\rightarrow b$ ”与“ $(\neg a)\vee b$ ”的真值表相同。
定义 $a\leftrightarrow b$ 为 $(a\rightarrow b)\wedge(b\rightarrow a)$ 。
【选读 2】可以看出,我们只需要 $\{\neg,\vee\}$ 就可以得到所有命题联结词 $\{\neg,\wedge,\vee,\rightarrow, \leftrightarrow \}$ 。前者叫做命题联结词的充足集。$\{\neg,\rightarrow\}$ 、$\{\neg,\wedge\}$ 等也是命题联结词的充足集。
命题逻辑的公理系统包括四个部分:符号库、形成规则、公理、推演规则(见选读 3)。我们在这里不必深究命题逻辑系统如何导出那些显然的逻辑规则(在命题逻辑的公理系统中,像 p→p 这样显然的公式是需要证明的)。我们只需要知道:我们的符号和逻辑的基础是坚实的。如果你实在很担心这一点,可以先学习数理逻辑,再学习公理集合论。
【选读 3】命题逻辑的公理系统 L
- 命题逻辑的公理系统包括四个部分:符号库、形成规则、公理、推演规则
命题逻辑公理系统 L 的符号库为 p1, p2, …, ¬, →, (, ) 注意最后两个符号是括号。
之所以没有 ∧ 和 ∨ 等符号,是因为它们可以用 ¬ 和 → 表示出来(见选读 1 和 2)。
一切语句都应当用符号库中的符号组成。但这也不意味着随机组成的一串符号,如((p1→,是合法的。为了组成合法的语句,我们还需要有形成规则。
- 公理系统 L 的形成规则有两个:(¬A) 以及 (A→B)。
它们表示什么样的公式(符号序列)是符合语法的。
注意,A 和 B 不是符号库中的符号,它们表示任意公式。公式是指一串符号组成的序列。
例如,我们可以先用第二个规则生成 (p1→p2),再用第一个规则生成 (¬p3),最后由第二个规则生成 ((¬p3)→(p1→p2)),这在语法上是一个合法的公式。
- 公理系统 L 的三个公理为
L1: (A→(B→A))
L2: ((A→(B→C))→((A→B)→(A→C)))
L3: (((¬B)→(¬A))→(A→B))它们负责将公理系统 L 与古典逻辑联系起来。由这些公理,我们可以导出推演出古典逻辑中的所有公式。当然,我们还没有定义什么是推演。这就引出了下面要介绍的推演规则。
- 公理系统的推演规则: 由 A 和 A→B 可以推演出 B。它又叫分离规则。推演规则告诉我们如何证明新的公式。注意,证明和蕴涵是两个不同的概念。
综上所述,公理系统 L 由符号库、形成规则、公理、推演规则组成。
下面我们来证明 p→p。
根据公理 L1: (p→((p→p)→p))
根据公理 L2: ((p→((p→p)→p))→((p→(p→p))→(p→p)))
根据推演规则: ((p→(p→p))→(p→p))
再根据公理 L1: (p→(p→p))
根据推演规则: (p→p),证毕为什么不把 (p→p) 这样简单且符合直觉的公式当做公理?公理不应该是自明之理吗?这是因为从 L1, L2, L3, 我们可以推出所有古典逻辑公式(这里还未包括一阶逻辑),并且 L1, L2, L3 之间没有任何的交叉与冗余。换句话说,这样做可以使公理的数目最少。
再换言之,我们不是要把“符合直觉”的东西当做公理,而是尽量把少的东西当做公理。公理越简洁越好。
到此为止,我们介绍了命题逻辑的一个公理系统 L。
一阶逻辑
以上介绍的 $\{\neg,\wedge,\vee,\rightarrow, \leftrightarrow \}$ 叫做命题联结词,它们加上形成规则、公理、推演规则,可以构成一个命题逻辑系统。接下来我们看看量词。命题逻辑系统加上量词及其相关的规则和公理,就成为了一个一阶逻辑系统。
$\exists x(\varphi(x))$ 表示“存在 $x$ 满足 $\varphi(x)$ ”,其中 $\varphi(x)$ 是 $x$ 的一个性质。
$\forall x(\varphi(x))$ 表示“对任意 $x$ 都有 $\varphi(x)$ ”。它等价于“ $\neg \exists x \neg\varphi(x)$ ”,即“不存在不满足 $\varphi(x)$ 的 $x$”。
可见,量词只需要 $\exists$ 就充足了, $\forall$ 可以用 $\exists$ 表示出来。
下面是一些简单的训练,它们将进一步帮助你熟悉一阶逻辑系统——公理集合论的符号语言。
$\forall x(x\in A\rightarrow \varphi(x))$ 可以简写成 $\forall x\in A, \varphi(x)$ 。它表示“对于 $A$ 中的所有 $x$ ,都有 $\varphi(x)$ ”。
$\forall x(x\in A\leftrightarrow \varphi(x))$ 表示“对于 $A$ 中的所有 $x$ ,都有 $\varphi(x)$ ,并且,满足 $\varphi(x)$ 的 $x$ 都属于 $A$ ”。换言之, $A$ 中有且仅有那些满足性质 $\varphi$ 的元素。
$\exists x(x\in A \wedge \varphi(x))$ 可以简写成 $\exists x\in A, \varphi(x)$ ,它表示“在 $A$ 中存在某个 $x$ ,使得 $\varphi(x)$ ”。
【选读4】**注意将 1) 与 3) 对比!**在 3) 中,不可以把“ $\wedge$ ”换成“ $\rightarrow$ ”,写成 $\exists x(x\in A \rightarrow \varphi(x))$ 。
这是因为,如果存在一个不属于 $A$ 的 $x$ (这实际上是必然的,因为我们后面将会证明,不存在包含一切的集合),那么 $x\in A$ 就是假的。而假命题蕴涵一切(见命题逻辑),那么它也就可以推出 $\varphi(x)$ 。于是这个式子的意思就是“只要 $x$ 不属于 $A$ ,它就满足 $\varphi$ ”,这不是我们的本意。
那么,为什么 1) 中使用符号“ $\rightarrow$ ”而不是“ $\wedge$ ”呢?
先来看为什么使用“ $\rightarrow$ ”。量词“ $\forall$ ”意味着要取遍所有的 $x$,我们分 $x\in A$ 和 $x\notin A$ 两种情况讨论。
一方面,如果 $x$ 属于 $A$ ,那么 $x\in A$ 就是真的,为了使 $x\in A \rightarrow \varphi(x)$ 为真,根据真值表,我们只能要求 $\varphi(x)$ 为真;
另一方面,如果 $x$ 不属于 $A$ ,那么 $x\in A$ 就是假的,根据真值表,假命题可以推出任何命题,所以 $x\in A \rightarrow \varphi(x)$ 是真的,即在这个情况下,它没有告诉我们更多信息。
综合以上两种情况,我们得出结论: $x\in A \rightarrow \varphi(x)$ 为真,当且仅当“对于 $A$ 中的所有 $x$ ,都有 $\varphi(x)$”。这正是我们想表达的意思!
从以上分析中,你可以体会到规定“假命题蕴涵一切命题”的好处。
为什么在 1) 中不能把“ $\rightarrow$ ”换成“ $\wedge$ ”?这是因为,如果 $x$ 不属于 $A$,那么 $x\in A \wedge \varphi(x)$ 一定是假的。量词“ $\forall$ ”意味着要取遍所有的 $x$ ,而总有一些 $x$ 是不属于 $A$ 的。因此, $\forall x(x\in A\wedge \varphi(x))$ 是一个恒为假的命题,没有什么用处。
**1) 2) 3) 这三个例子值得琢磨。如果充分理解它们,之后将会事半功倍。**如果你不想分析它们,也可以“take for granted”,记住它们对应的意思。
限于篇幅,本文只介绍了命题逻辑的公理系统(见选读 4),不再介绍一阶逻辑的公理系统。
罗素悖论
我们在中学所学的集合的定义,无非就是“一些元素所构成的整体”,并且还要定义一些性质:
确定性(一个对象要么属于集合 A ,要么不属于 A),
无序性(改变元素次序不改变集合),以及
互异性(集合中的任意两个元素不相同)。
这三个性质看似确定了集合的概念。然而,从现代数学的观点看来,它们只不过是朴素且漏洞百出的自然语言。它们没有说明集合是如何可能的,以及如何合法地定义新的集合等问题。
为了充分说明这一点,我们来看看罗素悖论。定义一个这样的集合
$$B=\{x|x\notin x\}$$即 B 是全体“不属于自己的集合”所构成的集合。这个对象没有为朴素集合论所禁止,但却是灾难性的。
现在问一个简单的问题:B 属于自己吗?如果 B 属于自己,那么按照 B 的定义,B 就不属于自己,如果 B 不属于自己,那么根据定义,B 就属于自己。于是我们得到了“p当且仅当非p”,这违反了排中律。这就是罗素悖论。
(此处的悖论特指逻辑学意义上的悖论,即“p当且仅当非p”)
这样的对象应当被禁止,可是朴素集合论却没有禁止它。换言之,朴素集合论是“不一致的”。不一致的系统是没有用的,因为你可以从“p 当且仅当非 p”证明任意命题,证明如下
p → p ∨ q
(p ∨ q) ∧ (¬p) → q
所以 (p ∧ ¬p) → q当然,在这个证明中,我们省略了很多步骤,因为我们还没有推导公理系统 L (见选读 3)中的更多定理。追求刨根问底的读者可以尝试用公理系统 L 给出完整的证明。这里,我们暂且接受它。
能推出一切命题的理论显然是无用的。所以人们要重新建立集合论。
我们之所以先介绍罗素悖论,是为了让读者感受到自然语言被取代的必要性。在接下来对集合论进行公理化的技术细节中,我们会解决罗素悖论,从而让读者体会到符号语言代替自然语言的重大意义。
本体论承诺(ZF0: 存在公理,Axiom of Existence)
在上一节中,我们看到了 $B=\{x|x\notin x\}$ 是一个不合法的定义。新的集合论应该要避免这个问题。如何避免?既然问题出在定义上,那我们可以从根源下手,用一套公理来确定定义新集合的规则,这样,当我们定义新集合的时候,只要看它有没有按照这些公理来进行即可。换言之,公理是我们定义新集合的唯一依据。
要从已有的集合定义新的集合,首先我们得有一个集合。因此我们的第一个公理叫做“存在公理”:
存在公理: $\exists x(x=x)$
它表明,存在一个集合。
别笑!如果我们只有一些由集合生成集合的规则,却没有一个集合可以用,那么数学宇宙就会是一无所有的。“巧妇难为无米之炊”,存在公理不是个玩笑。
当我们用符号去指称一个实体之前,我们总是假设了有一个实体是存在的。关于对实体的存在性的承诺就叫做本体论承诺。
这是一个不错的开始,因为这是我们第一次完全使用抽象符号,而不是说出“集合是一些元素所构成的整体”之类的自然语言。
实际上,存在公理可以由其他公理导出,但是为了学习的方便,我们暂且将它作为第“零”个公理,之后在适当的时机抛弃它。它其实就是个脚手架,当建筑建造完以后,它就会被拆除。
你可能注意到了“ $x=x$ ”是一句废话。为什么要这么做?因为根据公理系统的符号规则,“ $\exists x$ ”后面得跟上一些东西。由于我们只是想表达“存在一个集合”,所以后面只要跟上一个真命题即可。
你可能还注意到了 $x$ 只不过是一个符号,公式 $\exists x(x=x)$ 本身并没有表明它是一个“集合”,万一它是个数字呢?别急,到目前为止,数字还没有定义,因为我们把集合论当作基础。从基础出发意味着我们需要忘掉数学中的其他一切事物。
你可以想象这样一幅画面:数学的世界刚刚诞生,几乎空无一物,只有一个叫做“一阶逻辑”的星球漂浮于其中,上面有一些取之不尽的原料(符号库),地基(公理)以及一些符号规则(形成规则和推演规则)。然而,漫无目的地用规则不断生成新的公式(一串符号)是没有用的。我们需要创造出一些公理,从而让这些符号组织成一些有用的东西。这些最初的公理就是集合论的公理。后面我们会看到数字也是用集合定义的。
符号“ $x$ ”只是个“东西”,只不过我们把这个东西叫做集合。而本质上,建立在集合论上的一切数学对象都是集合:数字“ $3$ ”是个集合,有序对 $(1,2)$ 也是个集合……只不过当一个集合有了新的结构,我们会给它取上新的名字,比如“整数”、“有序对”、“环”、“概率空间”、“代数”等。如果你现在感到很诧异,没关系,后面我们会理解这一点。
你也可以这么理解,计算机上最复杂的软件,在底层都不过是 1 和 0,只是它们拥有复杂的组织和结构罢了。
现在我们已经有了一个公理。公理是不能被证明的东西,而是数学宇宙的上帝(也就是数学家们)凭空创造的。继续丰富我们的数学宇宙吧。
加入属于号(ZF1: 外延公理,Axiom of Extensionality)
在创造新的集合之前,我们还要定义如何判定两个集合相等:
外延公理: $\forall A \forall B(\forall x(x \in A\leftrightarrow x \in B)\rightarrow A=B)$
它表明:如果 A 中的每个元素都属于 B,且 B 中的每个元素都属于 A,那么 A 和 B 相等。
等等,我们还没有定义“ $\in$ ”是什么!没关系,在数理逻辑中我们有一个符号库,像“ $\forall$ ”、“ $\exists$ ”、甚至括号“ $($ ”这样的符号都在这个符号库中,我们只需要往符号库中加入一个新的符号“ $\in$ ”表示某种二元关系即可(“ $\notin$ ”可以用“ $\in$ ”和“ $\neg$ ”等符号来定义)。注意,符号库本身没有对符号做出任何规定和解释,给符号赋予结构和意义的是与之相关的公理。
需要强调,“ $\in$ ”只代表一种二元关系,人们会把“ $\in$ ”前面的对象想成是“被含有的东西”,后面的对象想成是“含有了一些东西的东西”,但是对于“ $\in$ ”来说,它前后的东西没有什么不同,都是某种“东西”。而“ $\in$ ”自己也不过是一个遵循某种规则的谓词而已。我们现在要习惯用忘掉一切的方式去思考,正如笛卡尔所做的那样。
这个公理的意义在于,它确定了符号“ $\in$ ”的第一个性质:相等。如果每个与 A 发生了“ $\in$ ”关系的对象都同样与 B 发生了“ $\in$ ”关系,且反之亦然,则我们说 A 和 B “相等”。
回到正题,注意到这个公理是如何蕴含了所谓的“确定性”、“无序性”和“互异性”。实际上,根据符号规则(这里我们没有列出),集合 $\{x,x,y\}$ 是一个合法的公式,只不过根据外延公理,它和 $\{x,y\}$ 相等罢了($\{x,x,y\}$ 中的每个元素都属于$\{x,y\}$,反之亦然)。我们可以把所有和 $\{x,y\}$ 相等的集合都记作 $\{x,y\}$ 。这就是所谓的互异性;而无序性就更简单了,符号规则本身就没有对顺序做出任何规定,对集合内部的元素而言,唯一有用的信息就是二元关系“ $\in$ ”,并没有别的符号规定其他的关系,比如序关系(那是我们以后要定义的);最后,确定性也是被蕴含的,因为这显然被逻辑学的基本规则(排中律)所确定了。可见我们根本就不需要用“互异性”之类的自然语言。
空集(ZF2: 分离公理模式,Axiom Schema of Separation)
到目前为止我们仍然没有一个确切的集合可以用,因为存在公理只是说明存在一个集合,并没有告诉我们关于这个集合的更多信息。当然,我们可以记这个存在的集合为 A,然后以它为原料来创造新的集合。但还有更好的做法,也就是定义一个空集作为原料。这样我们至少确切地知道这个原料是什么。
然而,从目前的公理,我们是定义不出空集的。我们还需要一个公理:
分离公理模式: $\forall A \exists B \forall x(x\in B\leftrightarrow x\in A \wedge \varphi(x))$
之所以叫它分离公理模式(Axiom Schema),是因为 $\varphi(x)$ 代表了任何一串(与 x 有关的)合法符号,也就是说,这一条公理包含了无数多条公理。下面我们就将其简称为分离公理。
分离公理的意义是,给定任意一个集合 A,我们可以依据性质 $\varphi$ ,将A中所有满足 $\varphi$ 的对象分离出来,构成一个新的集合。我们记这个新的集合为 $B=\{x\in A|\varphi(x)\}$ 。
终于,我们有了第一个构造性公理。构造性公理指的是从旧的集合构造出新的集合的规则。
当然,只知道这样的规则没有用,我们得先有一个“旧的集合”。幸好,由存在公理知道,我们至少是有一个“旧的集合”可以用的。
注意!我们通常所写的 $B=\{x|\varphi(x)\}$ ,在目前看来是不合法的,因为它并不是从已有的集合得到的,而是直接规定了一个性质 $\varphi$ ,并凭空地抽取了全体满足 $\varphi$ 的元素,来构成一个集合。**这实际上不是集合,而是一个“类”(Class)。它就是导致罗素悖论的罪魁祸首!**罗素悖论就是凭空抽取了全体满足“不属于自己”这个性质的元素来构成集合。这是错误的。这样做只能构成一个类,而不是一个集合。
存在公理断言存在一个集合,接下来我们就用分离公理构造一个确切的集合——空集。
根据存在公理,存在一个集合 $X$ (虽然我们不知道它具体是什么),再根据分离公理,$\{x\in X|x\neq x\}$ 是一个集合。
假命题 $x\neq x$ 可以推出 $x\in X$ ,当然也可以推出 $x\in Y$ , $x\in Z$ 等,而 $X$ , $Y$ , $Z$ 有可能是不同的集合。也就是说这样的集合可能有很多个,但下面我们要用外延公理证明这些集合是相等的。
记$A= \{x\in X|x\neq x\} ,B= \{x\in Y |x\neq x\} $ 。其中 $X$ 和 $Y$ 是任意集合。我们只需要证明 $A=B$ 。
根据外延公理:$\forall A \forall B(\forall x(x \in A\leftrightarrow x \in B)\rightarrow A=B)$ 。可见我们只需要检查对于任意 $A$ 和 $B$ ,$\forall u(u \in A\leftrightarrow u \in B)$ 是否成立。
实际上,由于 $A= \{x\in X|x\neq x\}$ ,故对于任意 $x$ , $x\in A$ 都是假的(否则会导出矛盾式 $x\neq x$ )。而假命题可以推出一切命题,因此 $x \in A\rightarrow x \in B$ 。
(注意,$x \in A\rightarrow x \in B$ 为真并不代表 $x\in A$ 为真)
我们刚刚证明了 $\forall x (x \in A\rightarrow x \in B)$ ,而用同样的理由也可以证明 $\forall x (x \in B\rightarrow x \in A)$ ,所以 $\forall x (x \in B\leftrightarrow x \in A)$ ,从而 $A=B$ 。
这样一来,我们就证明了$\{x\in X|x\neq x\}$ 是唯一的,也就是说,它与 $X$ 具体是什么无关。我们将这个唯一确定的集合记作 $\emptyset$ ,称为空集。
从上述分析中可以发现,空集不包含任何东西,因为对于任意 $x$ , $x\in \emptyset $ 都是假命题。
**注意到我们没有用“空集不包含任何东西”这样的自然语言来定义空集,而是先用公理来定义空集,再证明“空集不包含任何东西”。**这是形式公理化代替自然语言的一个体现。
我们现在终于有了一块砖头,接下来我们可以用空集这块砖头,去搭建更多的集合。不过在那之前,我们可以先把罗素悖论解决了。
也有其他版本的集合论公理系统会把“空集公理”作为一个公理,它断言:存在空集。而在我们的版本里,空集公理可以从存在公理+分离公理模式推导出来。
罗素悖论的解决
回想一下罗素悖论是怎么产生的。我们先是定义了$B=\{x|x\notin x\}$ ,并推出了 $B\in B\rightarrow B\notin B$ 以及 $B\in B\leftarrow B\notin B$ ,从而引起了矛盾。**为了解决罗素悖论,我们只需要使它们其中一个不成立即可。我们将要使后者不成立。**推导如下:
(1) 根据分离公理,可以定义 $B=\{x\in A|x\notin x\}$ 。称 $x\notin x$ 为性质 $\varphi$ 。
(2) 假设 $B\in B$ ,则根据 $B$ 的定义, $B$ 满足性质 $\varphi$ ,即 $B\notin B$ ,矛盾!所以只能有 $B\notin B$ 。
(3) 接下来我们证明 $B\notin A$ 。我们用反证法。假设 $B\in A$ 。
一方面,根据 (2), $B\notin B$ ,即 $B$ 满足性质 $\varphi$ 。
另一方面,根据我们的假设,有 $B\in A$ 。
所以 B 属于 A 且 B 满足性质 $\varphi$ 。根据 $B$ 的定义, $B\in B$ ,这与(2)矛盾!所以 $B\notin A$ 。既然 $B\notin A$ ,那么 $B\notin B$ 就不能推出 $B\in B$ 。
这样我们就解决了罗素悖论,即集合 $B$ 不属于自身,仅此而已,没有矛盾发生。
如果你觉得这一切发生的太快,我下面再用更自然的语言描述一遍**。本来我们是凭空地用性质“不属于自己”来定义一个集合 B,而分离公理模式告诉我们这样做不行。这就是问题的关键!我们必须要从一个已有的集合 A 分离出新的集合B,而 A 被证明是不含有元素 B 的,从而“B不属于自己”不能推出“B属于自己”。注意到从“B不属于B”推出“B属于B”还需要一个条件,就是“B属于A”。**
再换句话说,罗素悖论的关键在于“自我指代”,而分离公理消除了“自我指代”的可能。B 指代的只有 A 中的元素,而不是任何元素都能被 B 的定义指代。
以上的分析还证明了,对于任何一个集合 $A$ ,总有一个集合 $B=\{x\in A|x\notin x\}$ 不属于 $A$ (根据(3))。因此,所有集合构成的集合是不存在的,或者说,包含一切的集合是不存在的。
中场休息
本文介绍了集合论公理系统的前三个公理——“存在公理”、“外延公理”以及“分离公理模式”,并用它们解决了罗素悖论,以及建造了我们的第一个集合——空集。
在下篇文章中,我们会介绍更多的公理,并用它们来创造一些数学对象,比如自然数。
存在公理可以由后面的“无穷公理”导出,但是为了学习的方便,有时候先将其作为第“零”个公理,之后再将其剔除。实际上只有 9 个公理,它们分别是
ZF1 外延公理
ZF2 分离公理模式
ZF3 对集公理
ZF4 并集公理
ZF5 幂集公理
ZF6 无穷公理(可以导出存在公理)
ZF7 正则公理
ZF8 替换公理模式
ZF9 选择公理
前八个公理构成所谓的“ZF”公理系统,再加上选择公理就构成“ZFC公理系统”。“Z”和“F”提出者姓名的首字母,“C”则代表“Axiom of Choice”——选择公理。
本篇文章的续集: