第八章 无限集

第八章 无限集

为什么引入无限集?

计算机中数据的大小受内存的限制,为什么还要引入无限集呢?因为忽略掉那些很大且未知的上界并接受那些基于实数的理论是很有现实意义的。其次,在计算机设计编译器时,计算位数尽可能多的非负整数之和与计算位数不确定的两个整数之和是相同的。

在使用无限集去证明时,我们一般不会被直觉所误导,所以它为我们提供了一种很实用的证明方法。掌握无限集还有一个很大的好处——可以帮助我们了解从理论上来说计算机到底可以做什么不能做什么。

8.1 无限基数集

若存在无限集A,如果A surj B,则A“不小于”B。否则,A“严格小于”B,简写为A strict B。

定义8.1.1 :A strict B IFF NOT(A surj B)
对有限集而言,这种严格关系( strict)意味着“严格小于”。这可以从映射规则定理4.5.4直接推导出来。

推论8.1.2:对有限集A,B, A strict B IFF |A<|B|

证明如下:image-20221015162245256

康托有关无限的理论有一个很优秀的特点,就是它避免了去定义无限集的大小—它只是在比较集合的“大小”。

警告:我们并没有也不会去定义无限集的“大小”。如果要定义无限的“大小”就需要先定义一些具有特殊良序性质的无限集,这些集合被称作序数。有关序数的理论超出了本书的讨论范畴,要说清楚本章的内容,依靠“不小于”“大小相等”这些相对概念就足够了。

此外:我们用 surj 表示“不小于”, bij 表示“大小相等”。虽然绝大多数时候,这些概念在无限集和有限集上性质相同,但总有一些例外。在严格证明这些概念之前,不要想当然。

引理8.1.3:对任意集合A,B,C

image-20221015164041121

定理8.1.4:[施罗德-伯恩斯坦定理]对任意集合A,B,若A surj B且B surj A,则A bij B。

对无限集A和B而言,满射函数f :A →B 和 g:B→A都不意味着双射,所以并不能直接推导出双射函数e:A →B。

引理8.1.6:对应任意集合A,B,C

A strict B AND B strict C 蕴涵 A strict C

(可用反证法证明)

8.1.1 不同之处

无限集和有限集的一大区别就是,在无限集中添加一些元素并不会让集合变大。换言之,若A是有限集且b ∈ A,则有|[A u{b]|= |A|+1。所以A和A u {b}大小不同。但若A是无限集,则这两个集合的大小是一样的!

引理8.1.7:设A是一个集合且b ∈A,则当且仅当A bij A ∪ \cup {b}时,A是无限集。

证明:

image-20221019160304327

8.1.2 可数集

当且仅当集合C里的元素可以按序排列时,集合C是可数的 ( countable )

定义8.1.8:

当且仅当N bij C时,集合C是可数无限的( countably infinite )。

当且仅当一个集合是有限的或者可数无限的时,该集合是可数的。

当且仅当一个集合不是可数的时,该集合是不可数的( uncountable )。

注:可数性质并不能用来区分有限集和无限集。

引理8.1.9:当且仅当N surj C,集合C是可数的。事实上,当且仅当存在全映射函数 g:N →C时,非空集合C是可数的。

推论8.1.10:下列集合都是可数无限的

image-20221017100213685

引理8.1.11:如果A是无限集且B是可数的,那么A surj B。

注:由于向无限集中添加一个新元素并不会改变其大小,所以添加有限个新元素也不会改变其大小,毕竟我们只要一个一个地添加就可以了。不仅如此,一些更为严苛的断言也同样是真的:向无限集中添加可数无限个新元素也不会改变其大小

8.1.3 幂集的势严格大于原集合

定理8.1.12:[康托]对任意集合A, A strict pow(A)

推论8.1.13:pow(N)是不可数的。
证明:基于引理8.1.9,当且仅当N strict U,U是不可数的。

image-20221017110300404

推论8.1.14 :{0,1}^w 是不可数的

基于已知的集合,用以下推论,我们可以得到更多的集合是可数的还是不可数的。

推论 8.1.15 :

image-20221019163231906

推论 8.1.16:实数集R是不可数的。

推论8.1.17:正整数有限序列集合 ( Z + ) ∗ ({Z}^+)^* (Z+)是可数的。

更大的无限集
有时,不同无限集的大小差得很大。举一个例子,我们可以基于非负整数无限集N构建出这样一个集合的无限序列

image-20221019163743414

基于康托的定理8.1.12,该序列中的每个集合都比其左边的集合要大font>。不仅如此,全部这些集合的并也大于序列中的任意集合。通过这种方法,你想构建多大的无限集都可以做到。

8.1.4 对角线证明法

定理8.1.12和类似的证明方法一般被统称为“对角线证明”。举一个例子,假设在N和{0,1}^w 之间存在双射关系。如果这一关系存在的话,我们就可以用由无限长度的位串( bitstring)组成的可数列表去表示它。对应关系如下:

image-20221017122003094

用对角线元素组成一个元素D = 111001…

将D中的所有元素取反,得到C = 000110…

由上易知,C与上图中的任意元素都不同,没有一个自然数与之对应,所以得出

N strict {0,1}^w ,即{0,1}^w 是不可数集。

8.2 停止问题

有些很基本的事情是无法通过计算完成的,就像完美的类型检查、优化以及某些关于程序运行时行为的分析。在本节,我们会用一个简单的例子——停止问题。所谓停止问题,就是去判断任意一个给定程序是否会在没有被中断的情况下永远地运行下去。如果程序没有一直运行下去,那么我们称之为停止了。但是,如果这个程序一直不停止怎么办。那么如何判断一个程序不会停止呢?下面,我们将用对角线证明法去证明,如果一个分析程序试图判断一个尚未终止的程序是否会终止,这个程序的结果很可能是错的,甚至没有结果!

这里,只要是用来处理由ASCII码的256个符号组成的字符串的(属于集合ASCII*),不管用的是C++、Java还是Python,这样的程序过程我们称为字符串过程

如果一个过程因处理字符串所产生的计算最终完成时,就称这个过程识别了这个字符串。在本节中,一般称一个字符串集合为一门(正式)语言( language )。我们设lang§为由过程P识别的语言:

image-20221017195432941

当一门语言(字符串集合)和 lang§相等时,我们称该语言对字符串过程P而言是可识别的( recognizable )。

通常来说,程序都是用ASCII码写的,所以我们这里假设任意程序都属于ASCII。若字符串s ∈ ASCII是某个字符串过程的描述,我们称这个字符串过程为 P s P_s Ps,你可以把 P s P_s Ps,当成s经过编译生成的这样一个可执行的过程。同时,每个字符串都可以被当作字符串过程的程序。所以,当字符串s ∈ASCII*不是一个真的字符串过程时,我们就定义P,为默认字符串过程——即永不停止的过程。

定义 8.2.1

image-20221017195839281

定理8.2.2:No-halt是不可识别的。

证明:基于定义,对于任意s ∈ ASCII*,

image-20221017195942234

现在我们先假设No-halt是可识别的。这意味着有过程 P s 0 P_{s0} Ps0,可以识别No-halt,即, N o − h a l t = l a n g ( P s 0 ) No-halt = lang(P_{s0}) Nohalt=lang(Ps0)

结合式8.4可知,对于任意s ∈ ASCII*,

image-20221017200113082

现在设 s = s 0 s = s_0 s=s0,则有 s 0 ∈ l a n g ( P s 0 ) I F F s 0 ∉ l a n g ( P s 0 ) s_0∈ lang(P_{s0} )IFF s_0 \notin lang(P_{s0}) s0lang(Ps0)IFFs0/lang(Ps0),矛盾,可知No-halt不能被任意字符串过程识别。

所以,理论上无论用什么语言编写的程序都不可能为基于同样语言编写的程序解决这一停止问题。而且我们还证明了不存在过程可以判断任一程序是否终止。我们进而也可以轻松地证明也不存在过程可以完美识别任何程序的全局运行时性质。

8.3 集合逻辑

8.3.1 罗素悖论

image-20221017160751065

W是由一切不属于自身的集合所组成。当我们要知道W是否属于自己是,就会陷入两难的境地。如果W属于W,根据W的定义,W就不属于W;反之,如果W不属于W,同样根据定义,W就属于W。无论如何都是矛盾的。

事实上,罗素和他的同仁在当时就知道如何解决这一悖论:不应当假设W是集合。在证明中假设W是集合并不合理,因为我们知道S的取值范围是全体集合,但W不一定是一个集合。事实上,罗素悖论恰恰说明w最好不是集合!

但是如果放弃这一假设,就必须放弃另外一条公理:每一个以数学方式明确定义的集合的簇也可被认为是一个集合。

8.3.2 集合的ZFC公理系统

所谓集合论公式即是仅仅讨论集合元素的谓词公式。

集合论公式中不存在等号“=”。但当且仅当两个集合元素完全相同时,可以认为两个集合是相等的。所以集合间的相等关系可以表示成如下形式:

image-20221017163129699

集合论公式中也不存在“⊆”,但子集关系可以表示成:

image-20221017163231822

所以使用符号“=,⊆”的公式可以认为是相应的仅使用∈的集合论公式的缩写。为了简便,我们将不再对两者进行区分,统称为“集合论的公式”。

人们普遍认为,所有的数学理论都可以基于几个集合论的公式用简单的逻辑推导规则推导出来,这几个公式被称作包含选择公理的策梅罗-弗伦克尔集合论公理系统

外延公理:如果两个集合含有同样的元素,则它们是相等的:

image-20221017163655781

无序对公理:给定两个集合x和y,则必然存在一个集合{x,y},它的成员只有x和y:

image-20221017164758534

并集公理:集合簇z的并集u也是集合:

无穷公理:存在一个集合,其元素有无穷多个。准确地说,存在一个非空集合x,对于任意集合y ∈ x,集合{y}也是x的元素。

子集公理:给定集合x和任意集合性质,必然存在一个集合y包含且仅包含该集合中那些拥有此性质的元素:

image-20221017165341913

幂集公理: 一个集合所有的子集组成另一集合:

image-20221017165418327

替换公理:

image-20221017165720219

基础公理:这一公理旨在防止出现如下形式的集合无限序列

image-20221017183906615

在这种序列里,每个集合都是下一个集合的元素。也可以这样表述这一性质:每个非空集合都有一个“最小成员( member-minimal )”元素。即,定义

image-20221017183932710

基础公理是:

image-20221017183958669

选择公理:设s是一个由非空集合组成的集合,则存在从s中每个集合各选一个元素而组成的集合c。

8.3.3 避免罗素定理

ZFC公理系统和弗雷格最初提出的公理系统相比只多出了基础公理。基础公理表明了集合只能通过几种特定的标准方法从更“简单”的集合中生成。此外,基础公理还意味着集合不可能属于其本身,进而就解决了罗素悖论:因为对于任意S,S ∉ \notin /S,所以既然W包含了全部集合,那么W就不是集合,否则W就属于其自身了。

8.4 这些真的有效吗?

存在的一些问题:

  1. ZFC公理系统不一定是完美无缺的。说不定有一天罗素的后继者们也会发现存在于 ZFC公理系统中的悖论,进而摧毁了现在的数学体系。这听起来很疯狂,但确实发生过。
  2. 事实上,虽然人们普遍认为ZFC公理系统有能力证明所有的标准数学,但它的一些推论看上去还是有点自相矛盾。
  3. 一些关于集合性质的基本问题仍然没有解决。ZFC公理系统尚不足以判断连续统假设的真伪。因为有两个都遵循ZFC公理系统的集合簇,连续统假设对于其中一个簇成立,但对另外一个却不成立。所以如果不对当前的ZFC公理系统进行补充,我们无法判断连续统假设的真伪。

8.4.1 计算机科学中的无穷大

系。这听起来很疯狂,但确实发生过。
2. 事实上,虽然人们普遍认为ZFC公理系统有能力证明所有的标准数学,但它的一些推论看上去还是有点自相矛盾。
3. 一些关于集合性质的基本问题仍然没有解决。ZFC公理系统尚不足以判断连续统假设的真伪。因为有两个都遵循ZFC公理系统的集合簇,连续统假设对于其中一个簇成立,但对另外一个却不成立。所以如果不对当前的ZFC公理系统进行补充,我们无法判断连续统假设的真伪。

8.4.1 计算机科学中的无穷大

这些关于无限集的抽象问题即使在主流数学界也很少被提及,而在计算机界则完全不被提及。毕竟计算机界一般只关注“可数的”和有限集。正如8.2节中提到的那样,这些看似没什么实际意义的工作却发现了计算能力的极限。所以每一个计算机科学家都应该对这些研究有所了解。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值