02 一阶逻辑:语法与语义
所以,人们引入定义了一套更复杂因而也更精细的逻辑系统,称为谓词逻辑(Predicate Logic)系统。谓词逻辑是一个逻辑系统族,包含一阶谓词逻辑、二阶谓词逻辑、高阶谓词逻辑等等。弗雷格(Frege)是谓词逻辑的奠基人。相比于命题逻辑,他引入了量词符号“存在”与“任意”,这使得逻辑系统可以处理复杂的数学表述,是逻辑学发展史上的里程碑。本文讨论一阶谓词逻辑,简称一阶逻辑(First Order Logic, FOL)。
一阶逻辑的语法
一阶逻辑的字母表包含以下内容:
- 变量符号(variable symbols):与命题逻辑完全相同,变量符号有
,变量总数是至多可数的,为了方便也可以记为 或 ; - 连接符号(connectives):非(
),与( ),或( ),推出( ),等价( ); - 量词(quantifiers):存在(
),任意( ); - 等号(equality symbol):(
);(注意不是算术中常用的( )) - 括号(parentheses):(
),( )。用来区分优先级; - 关系符号(relation symbols):对于任意一个
,有一组“ 元关系符号”(也可以没有); - 函数符号(function symbols):对于任意一个
,有一组“ 元函数符号”(也可以没有); - 常数符号(constant symbols),
,或者也可以用特殊的字母表示;
因为一阶逻辑引入了
作为符号,所以我们从现在开始不再用 表示语义等价关系。
以上分类中的最后三类比较特殊。前面五类在所有场合都相同,而后三类则通常在需要时再引入,甚至如果讨论中不涉及的话可以为空。我们把后三类符号统称为符号集(symbol set),记为
虽然我们还没有定义一阶逻辑的语法和语义,但我们可以先简略地讨论一下为什么要使用符号集。因为我们要描述更细节的数学对象,所以必须在逻辑系统中有专门的符号来代表运算符、函数、关系、常数等等。而在形式化不同的数学表达时,我们需要不同的符号。例如如果我们想用一阶逻辑形式化自然数上的定理,那么我们就可能需要二元关系“整除”,二元函数“加法”,以及常量“
和命题逻辑相比,有了符号集以后我们可以用一个符号来表示一个命题(一张真值表),还可以用符号表示函数。可见,尽管我们还没有定义谓词逻辑的语法和语义,但我们已经感受到其复杂性。为什么把这样的逻辑系统称为“谓词逻辑”,其实有复杂的由来。这部分内容可以参考我[关于弗雷格语言哲学的笔记],弗雷格用带空洞的语词来表示谓词,而把量词“任意”和“存在”还原为了二阶谓词。而一阶逻辑就是量词之后的空洞只能填入原子对象的谓词逻辑系统。例如,我们可以说“对于任意一个自然数
为什么我们要着重讨论一阶逻辑呢?首先,逻辑系统越复杂,表达能力就越强,但是越复杂的对象研究起来就越困难,一阶逻辑是这些系统中最简单的;其次,我们将会看到哥德尔证明了越复杂的逻辑系统越可能产生缺陷;最重要的是,人们证明了:通过一些基于集合论的转化,我们原则上可以用一阶逻辑表达当今世界上的所有数学定理。也就是说本质上对一阶逻辑的讨论就是对所有数学定理的讨论,我们之后会看到如何做到这一点。
Terms & Formulas
对于特定的符号集
单个变量
是一个 -term; 单个常数
是一个 -term; 对于
,如果 都是 -term,那么对于任意 元函数符号 , 也是一个 -term;
基于term的定义,我们归纳地定义
- 如果
和 是两个 -term,那么 是一个 -formula; - 对于
,如果 都是 -term,那么对于任意 元关系 符号, 也是一个 -formula; - 如果
是 -formula, 是一个变量, 也是 -formula; - 如果
是 -formula, 、 、 、 也是 -formula。 - 如果
是 -formula, 是一个变量(不是一般的term), 、 也是 -formula;
符号集
我们要求一阶逻辑的term和formula都是有限长的字符串。
; ; ;
Sentences
量词是一阶逻辑中最核心也最复杂的问题。在数学语言中,出现在量词后面的变量是很特殊的。比如,“对于任意正整数
这有点类似程序语言中的局部变量与全局变量。在一阶逻辑中我们把前者称为受限变量(bound variables),后者称为自由变量(free variables)。我们利用结构归纳严格地定义formula中的自由变量列表(受限变量就是所有不是自由变量的变量):
; ; ,其中 表示 , , , ;
我们注意到根据定义,
如果一个formula中没有自由变量,也即如果所有变量都是局部的,那么这个formula一定描述了一些重要的性质,这性质不依赖于某些特定的变量,而是所讨论的数学对象本身的性质。比如“群中的任意元素总是存在逆元”,这是群这一代数结构本身的特性,而与群中某几个元素之间的关系如何无关。我们把没有自由变量的formula称为一个sentence。通常,我们会把公式集
Remark: 仅通过语法我们就能判断出一个formula中的var, free列表,可以判断一个formula是否是sentence,与“语义”无关。
一阶逻辑的语义
在命题逻辑中,只需给出所有原子命题的真值指派,就可以确定任何命题的真值。在一阶逻辑中,我们依然坚持这种从原子出发向上的语义构成规则。但由于现在的原子对象不再是命题,所以语义解释不再是指派“真值”,而需要为变量指派某一特定的数学对象,为函数符号、关系符号、常量符号指派数学含义。在所有这些指派完成了之后,符合语法的一阶逻辑term和formula就会自动产生“意义”。对于formula来说,它将会结合组成它的term的含义以及逻辑连接词的含义(这一部分再次与命题逻辑重合)而产生真值。再一次我们强调,由此得到的formula的真值是客观、唯一的,只有在承认指派的客观唯一性以及数学规则的客观唯一性的前提下才能讨论一阶逻辑的语义。
就像命题逻辑中同一个变量
Structures
指定论域以后,我们需要指定符号集中每个符号的数学含义。我们把这个从符号到其具体含义的映射记为
指定了
由此可见,二元组
例如,对于符号集
Interpretations
在确定了structure以后,我们给变量赋值。我们给出一个
基于结构归纳,定义term的语义为:
; ; ;
formula的语义定义如下:(我们用
当且仅当“ 与 是论域当中的同一个元素”为真; 当且仅当“ 元关系 成立”为真; 当且仅当“ ”; 当且仅当“ 并且 ”为真; 当且仅当“ 或者 ”为真; 当且仅当“ ,或者 且 ”为真; 当且仅当“ 且 ,或者 且 ”为真;
当变量出现在量词中时,我们实际上并不关心该变量的赋值。
当且仅当“对于任意 中的元素 都有 ”为真; 当且仅当“存在 中的元素 使得 ”为真;
Remark: 对于sentence,我们在讨论语义时给出structure就足够了。此时我们可以把
简写为 。
和命题逻辑中一样,我们可以定义语义性质和语义关系:
在选定符号集
设
对于两个
由结构归纳以及真值表可以证明:
等价于 ; 等价于 ; 等价于 ;
由此可见,一阶逻辑中符号
The Coincidence Lemma
对于两个不同的interpretation
什么时候两个不同的interpretation
我们把以上两点总结成一条引理,称为The Coincidence Lemma:如果
- 如果
、 在所有 的变量上有相同解释,就成立 ; - 如果
、 在 的所有自由变元上有相同解释,就成立 。
通过简单的结构归纳即可证明。
The Isomorphism Lemma
现在考虑
对于两个
如果
这一引理可以通过对formula的结构归纳严格证明(注意,不能对sentence归纳,因为sentence是基于formula定义的对变量有特殊限制的formula,不存在对sentence的归纳定义)。
特别需要指出的一点是,The Isomorphism Lemma的逆命题是错误的。“
The Substitution Lemma
在数学上,我们经常会用到代入(substitution)这一操作:代入操作是指对于某个term
term的代入操作是简单的,应当就是在字符串意义上把所有
; ; ;
然而我们发现,formula中的代入操作并不应当只是在字符串意义上把所有
; ; ; ; - 对于
,取出 中那些属于 且 的变量构成一个子列 。如果 不在 当中出现,那么 ;否则, ,其中 是不在 中出现的变量,且是 中下标最小的那个;
我们来理解我们对量词替换的修正。首先,对非自由变量的替换没有意义,把自己替换成自己也没有意义;其次,应当保证新的量词变量不在替换后的项中出现,如果不需要修改量词变量就不修改,否则就修改为从未出现过的一个变量,为了定义的确定性我们规定选择下标最小的那个。
以上替换规则是基于我们想让“替换后语义得以保持”的愿望定义的一系列字符串变换操作。简而言之它会把term中所有想要替换的变量替换成新的项,把formula中的想要替换的自由变量替换成新的项。我们需要验证,这样的变换确实“保持了语义”。而对语义的保持与否体现在用于解释这些term和formula的interpretation中赋值函数
- 对于任意term
,始终成立 ; - 对于任意formula
,始终成立 ;
再一次,我们可以用结构归纳说明以上两点确实成立。这称为The Substitution Lemma。这说明以上定义的“语法”上的替换方案确实达到了我们想在“语义”上达成的目的。