一阶逻辑的语法与语义
一阶逻辑的语法(Syntax)
我们将会建立的这套形式语言称为一阶语言(first-order language)或一阶逻辑(first-order logic)。对于一个集合,我们把集合的元素(elements)称为一阶对象(first-order objects),它们是构成集合的最基本要素。一阶对象的集合也即子集称为二阶对象(second-order objects),相应地二阶对象的集合构成三阶对象,等等。一阶语言规定我们在量词中只能提到一阶对象,例如我们可以说“对于集合
Alphabet
在形式语言中,一切讨论的对象都要用符号串(word)来表示,符号串就是由字母表(alphabet)中的字符连接而成的字符串。一阶逻辑的字母表中应当包含哪些字符呢?我们来考虑一些用自然语言表达的数学命题:一个群论中的命题是“群里存在一个元素使得所有元素和它相乘都等于自身”,我们看到这个命题中包含对元素的讨论,量词(quantifier)“存在”和“所有”,一个重要的概念“等于”,一个二元运算,也即一个“函数”;另一个表示等价关系的传递性的命题是“如果元素a和元素b等价并且元素b和元素c等价则元素a和元素c等价”,这个命题中包含一个因果推导和两个前提的并列的“逻辑关系”,用于表达两个元素等价的“二元关系”。一阶语言中还应当包括其它的一些表示“非”“或”“当且仅当”等等的符号。现在我们把这些符号总结如下:
一阶逻辑的alphabet包括以下内容:
- 变量(variables):一般认为变量应当记为
,这里能够用自然数做下标,是因为我们默认一阶逻辑能够使用的变量总数是至多可数的(有时为了方便,也可以把变量记为 或 可数的); - 逻辑符号(logical symbols):非(
),与( ),或( ),推出( ),等价( ); - 量词(quantifiers):存在(
),任意( ); - 等号(equality symbol):一阶逻辑中等号用(
)表示而不是算术中常用的( ); - 括号(parentheses):(
),( )。用来区分命题中各个部分的优先级; 元关系符号( -ary relation symbols), 。例如设 是一个二元关系符号,那么 就表示一个二元关系,比如 与 等价; 元函数符号( -ary function symbols), 。例如设 是一个二元函数,那么 就表示一个二元函数的值,比如自然数 与 的和; - 常数符号(constant symbols),
,或者也可以用特殊的字母表示。例如在群论中可以用 表示单位元这一常量。
我们注意到以上分类中的最后三类比较特殊。前面五类在所有场合都相同,而后三类则会在不同场合采用不同的符号,甚至如果讨论中不涉及的话可以为空。我们把这三类统称为符号集(symbol set),记为
Terms & Formulas
根据一阶逻辑的字母表,我们可以把字母表中的字母任意排列连接成字符串,这些字符串可以是任意的,比如
对于特定的符号集
单个变量
是一个 -term; 单个常数
是一个 -term; 对于
,如果 都是 -term,那么对于 元函数 , 也是一个 -term;
基于term的定义,我们归纳地定义
- 如果
和 是两个 -term,那么 是一个 -formula; - 对于
,如果 都是 -term,那么对于 元关系 , 也是一个 -formula; - 如果
是 -formula, 是一个变量, 、 、 也是 -formula; - 如果
是 -formula, 、 、 、 也是 -formula。
应当指出,这里的“公式”与日常语言中的公式概念不同,这里的公式不是指恒成立的等式,而其实是一阶逻辑的“命题”。一阶逻辑的语言指的就是所有一阶逻辑的命题。所以,我们把符号集
特别重要的一点是,我们要求一阶逻辑的term和formula都是有限长的字符串。也就是说,我们要求上面的归纳定义中,归纳次数是有限次。于是,每个term或formula都可以从某个原子性的(atomic) term或formula出发一步步构造得到,构造的过程可以写作一个有限长的字符串序列。我们把这样的归纳称为结构归纳(structural induction)。
; ; ;
Sentences
在数学语言中,出现在量词后面的变量与一般的变量之间是不同的。例如,形式串
; ; ,其中 表示 , , , ;
我们注意到根据定义,
如果一个formula中没有自由变量,也即如果所有变量都是局部的,那么这个formula一定描述了一些重要的性质,这性质不依赖于某些特定的变量,而是所讨论的数学对象本身的性质。比如“群中的任意元素总是存在逆元”,这是群这一代数结构本身的特性,而与群中某几个元素之间的关系如何无关。我们把没有自由变量的formula称为一个sentence。通常,我们会把公式集
一阶逻辑的语义(Semantics)
根据一阶逻辑的语法,我们能写出许多term和formula。到目前为止,它们都只是满足一定规则的字符串,而不具有“意义”。尽管这些字符串与我们在具体的数学中见到的项与公式很像,我们在看到一个一阶逻辑的项与公式时总能大致猜测出它试图表达的意义,但这种意义是未被定义的。在特定的场合下,我们会规定特定的解读一阶逻辑的字符串的规则,这些规则就构成了一阶逻辑的语义(sementics)。虽然在不同场合下这些解读并不相同,但它们是具有共性的。这种解读基于自然语言(中文或英文),所以事实上我们假定了自然语言建立在一阶语言之前,称为用来定义一阶语言的元语言(metalanguage)。
Structures
在不同的场合下,同一个一阶逻辑命题可能有不同的含义。例如对于
Interpretations
Structure给出了变量的定义域和符号集的语义。我们接下来需要定义term和formula的语义。
一个term的语义是从一个term到universe中一个元素的映射。为了确定这个映射,我们首先需要知道term中的每个变量代表universe当中的哪个元素,这就是要我们给出一个
; ; ;
formula的语义是从一个term到“真或假”的映射。对于一个formula
当且仅当“ 与 是universe当中的同一个元素”为真; 当且仅当“ 元关系 ”为真; 当且仅当“ ”为假(也记为 ); 当且仅当“ 为真并且 为真”为真; 当且仅当“ 为真或者 为真”为真; 当且仅当“ 为假,或者 与 都为真”为真; 当且仅当“ 与 都为真,或者 与 都为假”为真; 当且仅当“对于任意 中的元素 都有 ”为真; 当且仅当“存在 中的元素 使得 ”为真;
这样,我们就能够用自然语言翻译所有符合一阶逻辑语法的符号串了。
一个自然的疑问是,我们为什么要强调structures这一概念的重要性,如果它只是作为引出interpretations这一概念的一个中间步骤?对比二者,相比于structures,interpretations与其唯一的区别在于为变量赋了值。但对于sentences(那些真正刻画本质的formula),对变量的赋值是完全没有意义的,因为所有变量的值都以“存在”或“任意”的方式给出而不是指定。所以对于sentences,我们在讨论语义时给出structure就足够了。此时我们可以把
简写为 。
语义上的因果关系
我们已经看到,一个formula可能在有的interpretation下为真,在有的interpretation下为假。而对于同一个符号集
更一般地,有的formula之间在语义上有因果关系(consequence relation)。在一个具体数学场合下的因果关系是说如果某个命题A为真那么就能推出命题B为真。这样的因果关系可能在某个interpretation下成立,在另一个interpretation下不成立。但是像例如
我们可以把符号
语义上的等价关系
对于两个命题
通过简单的结构归纳,我们发现以下等价关系恒成立:
等价于 ;(我们熟知的De Morgan’s Law) 等价于 ; 等价于 ; 等价于 ;
这意味着,如果只看表达能力而不看书写的便捷性,
The Coincidence Lemma
对于两个不同的interpretation
同样的,什么时候两个不同的interpretation
我们把以上两点总结成一条引理,称为The Coincidence Lemma:如果
- 如果
、 在所有 的变量上有相同解释,就成立 ; - 如果
、 在 的所有自由变元上有相同解释,就成立 。
这一引理可以通过简单的结构归纳严格地说明(用“说明”而不用“证明”一词是为了和之后要讨论的证明的形式化做区分。对这一引理的“证明”是基于自然语言和一阶逻辑语义的定义的,我们认同这一关于语义的性质成立),此处省略。
The Isomorphism Lemma
现在考虑
对于两个
如果
特别需要指出的一点是,The Isomorphism Lemma的逆命题反向是不对的,也即如果
The Substitution Lemma
在数学上,我们经常会用到代入(substitution)这一操作:代入操作是指对于某个term
term的代入操作是简单的,应当就是在字符串意义上把所有
; ; ;
然而我们发现,formula中的代入操作并不应当只是在字符串意义上把所有
; ; ; ; - 对于
,取出 中那些属于 且 的变量构成一个子列 。如果 不在 当中出现,那么 ;否则, ,其中 是不在 中出现的变量,且是 中下标最小的那个;
我们来理解我们对量词替换的修正。首先,对非自由变量的替换没有意义,把自己替换成自己也没有意义;其次,应当保证新的量词变量不在替换后的项中出现,如果不需要修改量词变量就不修改,否则就修改为从未出现过的一个变量,为了定义的确定性我们规定选择下标最小的那个。
以上替换规则是基于我们想让“替换后语义得以保持”的愿望定义的一系列字符串变换操作。简而言之它会把term中所有想要替换的变量替换成新的项,把formula中的想要替换的自由变量替换成新的项。我们需要验证,这样的变换确实“保持了语义”。而对语义的保持与否体现在用于解释这些term和formula的interpretation中赋值函数
- 对于任意term
,始终成立 ; - 对于任意formula
,始终成立 。
再一次,我们可以用结构归纳说明以上两点确实成立。这称为The Substitution Lemma。这说明以上定义的“语法”上的替换方案确实达到了我们想在“语义”上达成的目的。