数理逻辑如何入门:数学的元语言——集合
豆瓣 / 赛义甫 / 2020-07-12 ——
在《「离散数学」是一门什么样的学科》中,我们曾提到两个关系,第一、数学与其它科学之间的关系:数学是用来解决其它科学问题的工具;第二、数理逻辑与数学之间的关系:数理逻辑是用来解决数学问题的工具。抽象地看,这两种关系实际上是同一种「范式」(paradigm):
输入 —— 处理×求解 —— 输出
在第一种关系中,解决问题的对象是其它科学的问题,解决问题的工具是数学,这种范式的实现就是:
问题×数据集 —— 数学建模×解决方案 —— 问题解
其中,「问题」是用自然语言或形式语言描述的文本,「数据集」则是以某种数据结构、例如某个数系的集合、向量集合、函数集合、多项式集合等形式存在的各种数学对象;「数学建模」则根据问题的性质可能是微分方程、线性方程组、概率模型等;而「问题解」则包括结果集、模型的可视化 —— 2D/3D 几何模型等。
在第二种关系中,解决问题的对象是数学的问题,解决问题的工具是数理逻辑,这种范式的实现就是:
数学问题×数学对象 —— 公理系统 —— 问题解
其中,「数学问题」是用一阶语言、集合语言和数学符号构成的形式语言文本,「数学对象」在这里相当于上面模式中的「数据集」,它是由集合定义的;对「数学问题」进行建模的结果就是一个特定的「公理系统」,这其中包括了对数学问题的形式化模型——代数结构和描述这个代数结构的形式系统:一阶语言、推演规则和公理集合。「问题解」是由一组定理构成,以及从给定公理集合到定理的推演过程 —— 数学证明。
如上所述,这两种关系属于同一种范式,不过在这个范式之外或之上,应当还有一种「机制」(mechanism),用来展示、描述、说明这个范式的工作方式,从问题描述、数据结构、模型结构、到求解过程、问题解的表示等,例如如何将数据集、参数集注入模型,所使用的数学工具与方法,具体的解决步骤,一步步接近最终结果。其中每个步骤都是一个可在有限时间、有限资源内获得明确结果的操作。这个过程的模式被称作「算法」,过程本身被称作「算法实施」。这个机制还应当展示「问题解」的类型:如果所获得的解决方案是演绎式的,则结果集是确定的,亦即可以立刻获得确切的解;如果所获得解决方案是归纳式的,所获得的结果集则是推测解,例如由概率模型所获得的解。
如果这种「机制」本身也可以形式化,用数学工具描述,则构成「元理论」(metatheory),作为其表述语言的逻辑系统,称作「元逻辑」(metalogic)。
数理逻辑的一个重要任务就是研究、描述、展示上述「范式」的元理论、结构、演算规则。它的中心问题有两个,第一,如何解决数学本身的问题;第二、展示解决问题「机制」的形式化侧面。因为解决数学的问题,又要以某些数学对象作为工具,展示解决问题过程的「机制」,这就像我们使用汉语作为描述工具展示研究汉语的过程和方法,如何区分和界定这「两种」汉语就成了问题,因为这很容易会出现语言混淆的问题。同样,用某些数学对象研究另一些数学对象、展示这个研究过程,也会有同样的问题。由于数学的本质是严密的逻辑过程,容不得任何瑕疵,因此在其它学科看来不是问题的问题(其实是其它一些学科没有达到数学的逻辑精确性因此一些逻辑上的问题往往被掩盖了)在数学就产生了巨大的问题,这就是数学中的悖论问题。数学悖论产生的根源有两个:一个是我们正在讨论的「用数学对象研究数学」、「用数学对象展示研究数学对象的过程」的问题,这个问题在哲学上被称为「自指」(self-reference) 问题,例如著名的「说谎者悖论」「理发师悖论」等。这个问题的一个形象比喻就是:一个人掉进坑里,他能否用自己的手把自己从坑里拉出来。引起悖论的另一个根源是「无穷」的问题,例如古希腊的「芝诺悖论」、「飞矢不动」等一系列有悖常识的结论。「无穷】问题使得微积分在近300年的时间里只是作为「工程上非常有用」的异端邪说,一块臭豆腐—— 闻着臭(没有任何理论基础)吃着香(可以解决用以往常规数学无法解决的大量问题特别是物理学的问题)。
要解决数学问题,自指问题和无穷问题就像两座大山一直压得数学家们喘不过气来。自指问题在塔尔斯基的真值语义论基本得到解决,其解决方案就是区分元语言和对象语言;而无穷问题一直是困扰数学分析发展的大问题。19世纪的数学家克罗内克(Leopold Kronecker)提出了一个著名观点:
God created the natural numbers, and all else is the work of man.
这句话,也成为我自己治学的座右铭。从字面上看,克罗内克认为只有自然数是天然存在的,剩下的都是人类自己折腾的产物。「折腾」这个词不登大雅之堂,在学术上称作「构造」(用作动词)(construct)。亦即、在数学中,如果需要某个不存在的对象,你必须按照一定的步骤将其创建出来。因此,自然数以外的所有数学对象都是被「构造」出来的。而在实数中,许多却无法用常规代数方法构造,被称作「超越数」。由此而引发的就是:要解决数学的问题,是否一开始就要排除「无穷」的概念。支持排除无穷概念的人认为,在物理世界不存在客观的、无穷的量,是部分数学家脑子里「杜撰」出来的、按照我们国内的说法就是「唯心主义的产物」,因为就算是我们现在所知道的这个宇宙的基本粒子的数目总和也是有穷的。而反对将「无穷」排除数学的人认为:「无穷」的概念是微积分的基础,而微积分又是近百年来最成功的数学分支,因此与其排除「无穷」,现在更需要的是获得对「无穷」概念的最符合逻辑的解释。近代以来,魏尔施特拉斯(Karl Weierstrass)的(ε-δ)极限定义和ZF公理集合论算是在解决『无穷』问题上取得的最大成就。
回到上面讨论的「用数理逻辑解决数学问题」的问题,我们需要一种元理论、一种元语言,这种语言本身具有所有数学对象本质特征,但又超然于各个数学分支,可以描述除自己之外的所有数学对象——这个语言就是【集合论】。不过,我们这里不谈「公理集合论」,不谈「无穷」,也不把集合作为一种数学对象,本篇笔记关注的的问题是:语言、自然语言、作为数学元语言的集合语言,我们是如何用语言表达世界的。
一、为什么【集合】可以作为数学的元语言?
我们通常是在高中阶段开始接触「集合」的概念。一般我们会把「集合」看做和其它数学对象一样仅仅是另一个新的数学对象,但是不久我们就会发现,和其它数学概念不同,一旦有了集合的概念,再学习其它数学课程时,集合就无所不在了,用它几乎可以解释或者定义任何其它数学概念。不过几乎没有人深究过为什么。大学的数学课程,如果是偏重纯数学的课程,集合的概念简直是如影随形,所有数学课程的开篇都要先要过一遍有关集合的内容。但是很少有教科书明确告诉你为什么。因此当我们从离散数学的角度再次学习「集合」时,首先要明确它与其它数学对象之间的关系,这个关系就是:【集合】是定义、描述所有数学对象的元语言。亦即、任何一个数学对象的定义,任何一个数学定义、定理,都可以而且应当用【集合】来表达。在这里,【集合】不仅仅是数学的一部分,更重要的是,【集合】是语言,表达思想的语言——表达数学思想的语言。同时,【集合论】作为一个理论,超越了一般的数学理论,它是定义、描述、解释其它数学对象的理论,通常我们会把集合语言看做是定义、描述、解释其它数学对象的【元语言】,【集合论】是数学理论的【元理论】,而「数学基础」(foundations of mathematics) 作为数学的一个分支,其主要内容之一就是【集合论】。但是除非是专研数理逻辑中的公理集合论—— 集合是作为数学对象被研究 —— 在几乎所有其它数学分支,「集合」的出现不是作为被研究的数学对象,而是作为定义、描述其它数学对象的语言。在这个意义上集合语言,就是数学的母语。因此,不仅仅是学习离散数学,学习所有数学的基础就在于学会用集合语言定义、描述、解释其它数学对象。所谓的「数学思维」、「数学思想者」,其中一个重要因素就是熟练使用集合语言表达数学定义,并可以从定义、公理出发证明定理。
【集合】作为数学语言,可以从其内容就可以体会:【集合】的概念,不像其它数学对象—— 例如,微积分的研究对象是实数、变化,数论研究整数,几何研究的是形状,线性代数研究的是向量空间等等 —— 集合并没有明确的研究对象。同时,与其它数学对象不同,集合没有精确严格的定义,你可以「描述」集合,但无法「定义」。当你学习集合时,对这个问题你问过为什么吗?【集合】的本质其实就一个,如何从一个已知集合产生新的集合。关于这个问题,可参照本栏目的【集合论的哲学认知】系列,这里不再展开。当【集合】本身作为数学对象时,它也具有所有其它数学对象所具有的代数结构,也有关系(成员性关系,子集关系)、运算(函数)——例如交、并、补、差等。但是如果将集合作为数学的元语言看待时,这些关系、运算都是为产生新集合所必须的工具。如果我们能深入理解【集合】是定义概念的数学工具,那么产生新集合意味着产生新概念。
如上所述、集合语言并没有特定的数学对象,只有两个基础概念:【集合】与成员。【集合】所要表达的是【概念】,相当于自然语言中的普通名词,而成员则是表达概念下的对象实例。例如,「饼干」表达的是概念,「我昨天晚上吃掉的第一块饼干」则是「饼干」的一个具体实例。和自然语言不同,集合语言所定义的概念,既可以有相应语言表达—— 普通名称,也可没有。例如 {2,3,5}是一个没有名称的集合,而 A = {2,3,5}则是一个有名称的集合。因此,在【集合语言】中,等号(=)的作用应当是「赋予」集合名称的意思。集合语言除了可以赋予概念——【集合】名称之外,还可以赋予「实例」名称,这样的名称在语言学中称作「专有名称」(proper name)。逻辑学的相当一部分内容就是研究「专有名称」的指称问题(这个问题详见【逻辑和语言】栏目的《语义学杂谈》),而自然语言则没有这种能力——自然语言无法明确、直接、精确严格的表达概念下某个对象实例,关于这个问题我们下面还会继续详谈。
二、如何从我们的认知获得集合概念
我们对世界的认识,通常是通过观察——感知——理解——概念化——表达的过程进行的。在这个过程中,存在着三大要素:存在 —— 概念世界 —— 语言。
如果把这个认知过程用于【集合】那就是:我们首先观察到了一种存在形态:同一性质对象的群体 (collection) 状态,例如,大街上川流不息的人群、汽车,菜市场堆积如山的蔬菜、商场里摆放的无数商品,我们在学习科研中面对的大量的习题和数据。
这些「群体」状态对我们的认知来说,通常我们不会对「群体」中的个别元素感兴趣,而只对这个群体的共同性质感兴趣。对「美国人」这个群体,我们感兴趣的不是某个具体的个人,而是这个群是由具有「美国人」这个属性的对象组成的「群体」。一袋大米,我们感兴趣的,不是特定的哪个米粒,而是构成「群体」对象的属性都是「大米」——这就是我们产生「美国人」、「大米」这个概念的物质基础。
除了「群体」的共同性质,有时我们会对这个「群体」的规模 —— 数量、或者某个物理度量感兴趣 —— 这就是我们产生「数」概念的最原始动机。因此,从「认知」的角度,「群体」概念要先于「数」的概念。
「群体」的概念反映到自然语言上,就形成「普通名词」,例如、「学生」、「厨师」、「汽车」等符号。例如在学生这个概念下,包含了千千万万个具体的有名有姓的学生,如果某个学生的姓名是「张三」,那么自然语言就可以用「张三是个学生」表示。在这个句型中,主语一定是某个学生个体的姓名,而「是」后面的名称则表示是一个「群体」概念。但我们对世界的认识过程—— 例如在这个特定语境下,对「学生」这个「概念」的认识,则是先从个体开始,然后获得对个体组成的「群体」的认识,当我们有了「学生」这个「概念」之后,这个「群体」——由多个个体构成的聚集,就转化为一个单一认知单位 —— 概念,当我们获得「学生」这个名称并将其与我们已知的这个群体在认知上「绑定」后,就完成了对「学生」这个概念对象的认知过程。这时,我们获得三种知识:
1.根据「学生」应当具有的属性,我们会识别在更大的群体中哪个人、或哪些人属于「学生」群体,哪些不是,这些具体的学生个体,我们称之为【实例】(instance);
2.理解「学生」这个名称的确切含义,并可以列举出学生所具有的「属性」这些属性足以将属于这个群体的个体与不属于这个群体的个体分开;
3.对任何一个特定群体,有关注这个群体规模的需要,这就产生了「多少」这个概念。由这个概念,则产生「数」的概念,从「数」概念出发,就有了「计数」的需求。而将「计数」一般化,就产生了对【群体】进行「统计」的概念。
这样,这个认知过程,相应也包括了三个要素:
·独立于我们精神世界之外群体的存在
·群体映射到我们精神世界的存在:概念,包括群体本身的概念、群体的实例概念、群体规模
·对概念,实例的语言的表达
当我们将这个认知过程用【集合语言】表达时,我们就可以去除自然语言中许多不必要的成分,这使得语言的表达更简洁明确。更重要的是,集合语言是一种形式语言,而形式语言的最大特点是:除了少数具有固定意义的符号外,表达一般具体概念、实例没有固定的词汇,而是用一组特定的没有意义的拉丁、希腊字母和特殊符号表达。这种方法我们在中小学阶段就已经熟知,那就是用字母表达任意数学对象。因此,集合语言可以超越特定的数学分支,可以用【集合】表达任何数学概念,用【元素】(成员)表达任意具体的数学对象实例。对于【群体】的规模,表达方法是使用阿拉伯数字。在【集合】语言中通过计数所获得的【群体规模】,被称为【集合】的【基数】。
三、集合语言与自然语言的区别
自然语言是我们日常生活语言,具体说就是中文。任何自然语言与人工语言相比最大特点之一就是有大量丰富的具有固定意义的词汇。自然语言的另一大特点是具有非常复杂的语法,而且自然语言的实例—— 话语,并非直接反映其内在的语法。有大量的词汇的好处是,可以非常细致地表达我们人类对这个世界的认知,特别是自然语言的词汇有大量的同义词,可以描述细微处略有差别的对象或者包含我们对这些对象特有的感觉。但是从数学的严格意义看,任何同义词语义之间的差异都是离散关系;不同自然语言之间,有些表达在A语言中是一个简单的词汇,而在B语言中就不得不是一个短语甚至非常复杂的短语,如果要表达两个词汇之间的中间概念时,就非常困难或者表达方法变得非常复杂。举个简单的例子,方向,我们有「东、西、南、北」,介于「东」和「北」我们可以说「东北」,那么介于「东」和「东北」呢?我也曾见过「东东北」之类的表达,但是这种表达没有派生性,亦即无法按照这种规则继续组词。
自然语言的另一大缺陷就是无法用词汇表达实例,一定要借助句法手段。例如,昨天我说「我吃了一块饼干」,今天我又说「我吃了一块饼干」,句子用的都是「一块饼干」,但是今天的此饼干并非昨天的彼饼干,因此我们无法在自然语言中用简单自然的方式表达某个对象的实例,但如果我们稍有数学知识,马上就会用a表达昨天那块饼干,用b表达今天这块饼干。那a和b是「饼干」的意思吗?我们不介意。我们实际上是在用无意义的形式语言符号临时给两个无法用自然语言区分的对象实例命名,使得a和b临时担任这两块饼干实例的指称代表。
这就是为什么自然语言从本质上不适合作为描述精密科学的语言。而我们现在要学习的【集合语言】,则是一种形式语言,这种语言最大特点就是:其基本词汇都是没有固定意义的符号,就像上面的a和b一样,所代表的意义,可以由语言使用者「临时起意」,任意指派—— 这些就是我们学习数学知识后获得的见识。集合语言既可以准确表达概念,也可以精确表达概念下的每个具体实例。
和其它形式语言一样,集合语言中,只有少数关键词和自然语言的词汇一样有固定的意义。例如∈、⊆,表达的是真假的概念,称作「谓词」,而∩、∪、* 等是生成新对象的过程,称作【函数】。除此之外,还有{、} (、)、|、逗号等分隔符,表达不同的分隔意义。除此之外,【集合语言】的词汇是有限的、可列举的、可以任意指派的、没有意义的字符,以及和这些字符组合在一起的下标或上标。
这样的语言优缺点正好和自然语言互补。正如上面所显示的,集合语言可以任意表达我们认知世界中的实例。另一个优势就是可以任意定义概念。还拿「方向」做例子。做一直角坐标系,正x轴表示「东」,正y轴表示「北」,负x轴表示「西」,负y轴表示「南」。从原点出发,做射线与x轴成夹角为1°,做做射线与x轴成夹角为2°,...直到做射线与x轴成夹角为359°。这样我们只需选择{0,1,2,...359}任意子集合就可以表达任何方向了。这样表达的方向,要比自然语言精确多了。
那集合语言可以表达更精确概念的原理是什么?就是集合的【成员性】概念。还原成我们「前集合」的语言就是——任何名称都是由实例确定的,用集合语言的术语就是——任何集合都是由其元素决定的。例如:概念1= {a,b,c,d}, 概念2 = {a,b,e},如果概念1的语言形式为名称1,概念2的语言形式是名称2,那么,我们可以说,名称1和名称2是近义词,而且名称1的意义覆盖范围要大于名称2。尽管我们不知道概念1、概念2以及它们的语言表达形式名称1、名称2到底是什么意思(其实根本无需知道!),但我们仍然可以从它们的成员定义轻易得到它们的异同。但自然语言就没那么容易了。例如,前几年有人问「美丽」和「漂亮」的区别,回答则是各式各样,众说纷纭。
集合语言更强大的一面是通过这种操作,获得新的概念。例如集合的交并补差等。因此,掌握了集合语言,等于掌握一种类似望远镜和显微镜的能力,对于自然语言中只能模糊识别的对象更清晰的描述,同时对于一些复杂对象我们不需了解细节的时候,集合语言可以使我们只关注只需关注的方面。换句话说,集合语言使我们对概念的定义变得灵活,不再受自然语言离散化的制约,只要可以确定实例、或者确定实例的性质就可以定义新的概念。而且,这些概念通过各种操作就可以获得介于已知概念之间的新概念。这是自然语言根本做不到的事情。
四、集合语言是如何表达概念的
【概念】属于我们精神世界的东西,看不见摸不着,【概念】要通过语言才能表达。但是语言表达概念并非我们想象的那么简单,例如,「曹雪芹」与「红楼梦的作者」是一个「概念」吗?3+2和5是一个概念吗?如果是,那么1+4和3+2是一个概念吗?如果我的家庭是由我的父母和我组成,那么「我的家庭」和「我父亲、我母亲、我」是一个概念吗?计算机的性能是由一系列参数构成,那么「计算机性能」和关于计算机的相关参数列表是一个概念吗?如果要准确、精确、无误地回答这个问题,恐怕要写一本书,甚至一系列书。我们这里不会深入讨论这个问题,我们这里的目标是利用集合语言试着明确表达这些概念。
首先,按照一般的哲学概念,概念是从多个经历的实例中提取的,用《实践论》的观点说就是「从感性认识到理性认识」。不过这里,什么是「感性认识」、什么是「理性认识」并没有一致而统一的定义。因此,哲学的许多问题,需要数学工具才能说清楚,这里的「数学工具」就是【集合】。如果要用「集合」工具说明「感性认识上升到理性认识」是这样的:
理性认识 = {经历1,经历2,...,经历n}
也就是说,多个感性认识的经历,最终上升到「一个」理性认识。如果这些感性认识尚未上升到理性认识,那么描述就是这个样子:
{经历1,经历2,...,经历n}
没有左侧的等号和代表理性认识的符号。感性认识一旦上升到理性认识形成概念,那么就一定是具名的了,例如在上面那个例子中,我们用「理性认识」这个词汇表达理性认识这个「概念」。
从上面的讨论,我们可以得到这样一个认识:概念的名称是概念的外在表达形式,而等号右侧花括号内的是用符号表达的实例,由于自然语言表达实例的具体词汇非常贫乏,通常我们只能用加标数字的方法表示不同的实例,现实中,具名的实例的最典型例子是人名、地名、历史事件、化学元素名等需要「个别」引用的对象。但是我们也知道,自然语言不善于表达实例,因此对每个不同实例的命名无法做到完全唯一,这就是我们生活中常见的重名重姓的情况。因此,我们现在可以用集合作为工具回答「曹雪芹」与「红楼梦的作者」是否同一概念的问题。「曹雪芹」,按照我们当前的讨论,属于「人」这个概念下一个具名的实例,亦即、有固定名称的实例,而「红楼梦的作者」并非概念下的实例,而是某个概念的属性,因此我们可以说,「曹雪芹是红楼梦的作者」、「施耐庵不是红楼梦的作者」。如果用集合的表示法表达:
{x ∈ 人 | 红楼梦的作者(x) }
现在的问题是, 我们能否仿照前例,定义为:
曹雪芹 = {x ∈ 人 | 红楼梦的作者(x) } ?
按照我们的集合定义,等号左侧的应当是个集合的名称,而不应当是个体的名称,而「曹雪芹」并非是集合名称,因此这个表达式应当为:
{曹雪芹} = {x ∈ 人 | 红楼梦的作者(x) }
这样的定义,才符合我们的认知:「曹雪芹」是「人」这个概念下的某个具名实例,而「红楼梦的作者」则是一种【属性】(又称作【性质】),但这个属性并非是「人」这个概念所必有的,它只是「人」这个概念下某个子概念才具有的性质。有些人可能要问,为什么不能说是概念下某个具体实例的属性?如果有集合这个工具,回答就很简单,「概念」既然是代表多个实例的集合,而集合只能由实例定义,那么一切属性只能是集合的属性,如果一部分实例、亦即,如果一部分集合成员具有而其它成员不具有某个属性,那么这些具有属性和不具有属性的成员就分为两个新集合,具有属性的集合和不具有属性的集合,此时,这两个集合就构成了原集合内相互没有交集的子集合。这两个子集合中的一个的成员数量可以是0,可以是1,而另一个则一定是n-0,n-1。因此,「曹雪芹是红楼梦的作者」实际上是把「人」这个集合分割(partition)为「红楼梦的作者(x)」为真的子集合和「红楼梦的作者(x)」为假的子集合,而包含「曹雪芹」的子集合属于前者,包含所有其他人的子集合属于后者。在「集合语言」中,我们永远只谈论集合,而集合则永远是由其成员确定。如果「曹雪芹」是具名个体,而「红楼梦的作者」是区分在「人」这个集合中由「曹雪芹是红楼梦的作者」这命题真假所产生的两个没有交集的子集,那么,我们就知道,「曹雪芹」是「人」集合中的一个成员,而 {曹雪芹} 则是使「曹雪芹是红楼梦的作者」这个命题为真的「人」这个集合下的唯一子集,因此,「曹雪芹」和「红楼梦的作者」并不是同一概念。再重复一遍:前者是具名的个体,后者是「人」这个集合下使得一个命题为真的成员的子集合。表达同样概念的另一种句法结构是使用一阶语言句子的谓词表达式:
红楼梦的作者(曹雪芹)
这个表达式应当和集合语言的表达式等价。从这个例子可以看到集合语言的强大威力,它可以把许多自然语言无法说清的、使大多人互相扯皮打口水仗的问题说清楚。
学习集合还有一个使人困惑但是大多数教科书忽略或说不清楚的问题就是:集合和元组的区别。二者在表达上十分相似,前者用花括号、后者用圆括号。除此以外再无更详细的说明。在一些程序语言中,对集合和元组的区分也仅仅是句法上的区分,例如集合成员如果相同则忽略,而元组允许元素重复等。为了搞清楚其中的差异,我们这里问两个问题,第一,平面直角坐标系上的坐标点能否用集合表示,为什么?第二,如果要表达一个家庭和其成员,应当用集合还是元组?第一个问题很明显,回答是不能。为什么?最直接了当的回答是:集合成员没有顺序而元组成员有序,也就是说,元组的成员,不仅是成员本身的「值」而且在同值情况下成员排列的物理顺序也决定着元组之间是否相等,因此成员数量为2的元组又称作「有序对」。那「有序对」是如何构造出来的呢?通常的说法是通过笛卡尔积,但是笛卡尔积是一个集合,而集合又是根据其成员定义的,这样,笛卡尔积和有序对就形成了循环定义的窘况。离散数学中包括了「组合数学」的内容,组合数学中有一个概念叫做「组态」,意思是,当一组对象,或者说一个对象集合,按照一定的规则和约束条件排列时,由这些规则和约束产生的排列模式就是一个「组态」。例如,一堆象棋子,首先按颜色分成两组,然后根据棋子上的标识把棋子摆放到棋盘唯一确定的位置。这就形成了一个特定的「组态」。按照这个观点,一个平面坐标点,也是按照规则,亦即、第一个位置放入x轴的数、第二个位置放入y轴的数,因此也形成一个组态。
有了这个概念,我们来看第二个问题,一个家庭,由父、母、子女组成,那么它应当是集合还是元组呢?假定是集合,那么,给定一个集合,{张XX,王XX,张X},你能判断谁是父亲谁是母亲谁是子女吗?有些人可能根据姓氏「猜」「王XX」是母亲,这虽然猜对的几率很高,但是无法保证,更重要的是,无法判断剩下的两人身份。为什么?集合没有「组态」。再来看元组。元组的本质是对对象各个方面的描述,而不是一个综合概念。举个例子,一个房间面积,可以表达为12平米或4x3平米,前者是综合概念,而后者则是一个「组态」概念,如果我们理解4x3背后代表的是长乘宽的概念,那么我们不但知道房间的面积,而且知道它的规格。回到「家庭」的例子,如果我们无需知道家庭成员的具体角色,只需知道这个家庭由谁多少人组成,那么集合足矣。反之,我们可以设定一个具有组态的元组,例如,最后一个成员为父亲、倒数第二个成员为母亲,剩下的为子女,那么这个家庭成员的信息不但更完整,而且也更精确。因此元组更适合描述复合对象下具有「组态」的各个子元素。这里需要注意的是,元组所描述的对象,应当仍然是实例,而不是概念,亦即,元组所定义的对象,应当是集合的元素、成员,而不应当是集合。如何验证这个说法的正确性呢?如果你是程序员,懂一点数据库原理,就知道,一个元组代表「一条」记录,而不管这个元组有几个成员,一个实体是由元组作为元素构成的的集合。如果你不熟悉数据库,那么,我们拿电脑举例子,一台电脑,是由多个零件组成,包括CPU、内存、硬盘等,组装一台电脑,其实就是把相应的零部件安装到固定的位置,原理和棋盘摆放棋子一样。因此,电脑组装,其实也是按照一定的「组态」把无序的元素按照规则和制约排列到相应位置。因此,一台电脑,可以由一个元组构成。那么10台电脑,就是一个由这样的元组构成的集合。小结:元组与集合的区别就是,前者按照一定组态描述复合实例,而后者描述概念,由实例定义的概念。
五、通过集合语言、一阶语言培养「数学思维」
「数学思维」应当是学习任何数学知识的基本要素,目标是培养自己的「数学成熟度」,最终达到提高自己理性逻辑思维的能力。要达到这个目标,首先要建立【语言】的意识。一个数学文本,不管是一本教科书,还是一道数学题,都是由若干个句子构成。大部分国人在学习数学时,很少有语文的概念,特别是数学著作中的定义、概念等,很少有人意识到它们是由一个个句子构成。第二,每个句子都含有一个命题。【把所有句子看做是表达特定语义的命题】,这是培养数学思维的第一步。因为只有有了「命题」这个概念,你才可能产生问题:这个命题是真还是假?如果你认为是真,或者,被认为是真,你就需要证明它。例如,「北京是中国的首都」,这是一个句子,这个句子含有一个被公认为「真」的命题,现在如何证明它。要证明这个命题为真,那么就要有几个前提,或者叫公理。例如「中国是一个国家」,「北京是一个城市」。还要有几条公设:第一、首都是国家中央政府所在地,第二,首都必须是城市,第三、中国中央政府的所在地是北京,因此,根据公理公设,我们利用给定的推理规则就可以得到结论:「北京是中国的首都」这个句子的命题为真。
因此,培养数学思维,首先是对所有的话语建立句子的概念,然后从句子得到其中的命题,并随时问自己,这个命题是否为真,如果为真,我如何证明?要证明,我需要那些前提条件,亦即,需要哪些公理,如果已知公理不足以证明,我还需要那些进一步的条件——公设;然后按照一定的推演规则得到结论,这个结论就是定理。在这个过程中,集合语言起着决定性作用。因为任何自然语言都无法真正精确描述概念,需要先把自然语言翻译成集合语言和一阶语言,使得所描述的问题更加精确、清晰,没有模糊、二义性。也就是说,把自然语言翻译成形式语言的过程,就是使概念精确化的过程。只有每个概念都可以用集合语言描述时才可以说是精确化了。而证明过程则是一阶语言规则的反复使用过程。
总结:
集合,不仅仅是数学家们研究的数学对象,更是研究「数学家们研究数学对象」这门学科所使用的工具——数学的元语言,精确、严格表达思想概念的语言。