2. 一阶逻辑

2.1语言

一阶逻辑的语言元素 有一个可数集的变元符号 , 命题逻辑中的 两个符号, 还有以下这些内容:

1.

全称量词符号

2.

元函数符号 , 是两个元自然数, 常元符号看做 元函数符号

3.

元谓词符号 , 是两个元自然数, 元谓词符号就是命题逻辑中的

4.

等词符号 , 它是一个特别的 元谓词符号.

注意我们可疑地令语言中的等词为 而非 , 因为后者我们将用来指称元语言的 (换言之, 作为字符串的) 相等. 另一种考虑是, 指代模型上作为集合的相等 (完全一样), 而 在模型上不过是一个等价关系.

今后小写字母 默认是变元符号, 小写字母 默认是函数符号, 大写字母 默认是谓词符号.

定义 2.1.1 (项). 我们定义一阶逻辑中的项指的是按照以下操作规则得到的只有有限长度的字符串:

1.

常数符号 是项.

2.

是变量符号, 则 是项.

3.

是项, 元函数符号, 则 是项.

且若一个有限长度的字符串不能经由此过程生成, 则不称其为项.

今后小写字母 默认为项.

定义 2.1.2 (公式). 我们定义一阶逻辑中的公式是按照以下操作规则得到的只有有限长度的字符串:

1.

是项, 元谓词符号, 则 是公式.

2.

是公式, 则 也是公式.

3.

是公式, 是变元, 则 也是公式.

且若一个有限长度的字符串不能经由此过程生成, 则不称其为公式.

今后小写字母 默认是公式.

变元与公式之间有一个重要的关系.

定义 2.1.3 (自由出现). 我们定义某个变元 在公式 中的自由出现, 这是一个判断, 将每个公式给到一个真或假:

1.

形如 , 则 中自由出现当且仅当 作为字符在某个 中出现.

2.

形如 , 则 中自由出现当且仅当它在 中自由出现.

3.

形如 , 则 中自由出现当且仅当它在 中自由出现或它在 中自由出现.

4.

形如 , 则 中自由出现当且仅当它在 中自由出现且 中那个被量化的字符 不是 .

不在 中自由出现, 但作为字符在里面出现, 则称 受限出现或约束出现.

若公式 中没有自由出现的元素, 则称它是一个语句.

注 2.1.4. 我们可以引入 作为 的缩写, 作为 的缩写, 作为 的缩写, 作为 的缩写. 也称作存在量词.

因为有等词的语言更复杂, 我们今后默认语言里有等词; 没有等词的语言只要忽略所有等词相关的内容, 或者加入一个最简单的等词 就可以了.

很显然, 现在项就是个无辜的, 在地位上和变元相去不远的字符串, 而推理、判断这些高级活动则交由公式来承担.

2.2语法

我们现在陈述一阶逻辑的一般形式推理系统. 首先来定义一些必要的操作.

定义 2.2.1 (全称概括). 称公式 是公式 的一个全称概括, 若有有限个变元 使得 .

定义 2.2.2 (替换). 若有变元 和项 , 我们对公式 定义替换 , 它就是按字符串操作, 在 中每一个自由出现 的地方都把 改写成 .

然而, 很多时候随意的替换会改变命题的真假. 我们需要以下关系.

定义 2.2.3 (无冲突替换). 对变元 和项 , 可无冲突替换 是一个给所有公式的判断, 每个公式判断一个真或假, 递归定义如下:

1.

形如 , 则可以无冲突替换.

2.

形如 , 则 中可无冲突替换当且仅当它在 中可无冲突替换.

3.

形如 , 则 中可无冲突替换当且仅当它在 中可无冲突替换且它在 中可无冲突替换.

4.

形如 , 则 中可无冲突替换当且仅当 不在 中自由出现, 或 ( 不在 中自由出现且 可无冲突替换).

现在, 我们的公理是以下这些形式的每条公式的所有全称概括:

1.

形如命题逻辑公理的公式, 其中原来需要命题逻辑公式的地方现在以一阶逻辑公式代替之.

2.

, 其中在 可无冲突替换 .

3.

4.

, 其中 不在 中自由出现.

5.

6.

, 其中 是把 里面某些 (不一定是全部, 才是全部) 出现的地方改成 得到的新的公式 (字符串操作).

最后, 我们仍然定义证明. 是存在一列满足以下要求的公式串 的缩写:

1.

是公理, 或

2.

中, 或

3.

, 这里 .

我们同样略去许多元定理 (例如反证法, 逆否证法, 概括定理, 演绎定理等等) 的证明, 而默认读者有能力 (或者充分相信其他人有能力) 将这些我们直观把握的证明方法形式化为这个对象语言里面的一个推理序列的生成模式.

有一些有特殊地位的元定理, 我们将在后面证明完备性定理的时候予以特别的注意, 并加以简略的证明.

2.3语义

现在我们要考察真. 注意这里我们并不能简单的要求公式们谁真谁假, 因为有自由出现的变元们, 如果反复要求怎样怎样必须一样怎样怎样必须相反, 我们要做的事就太复杂了, 而且从这样的操作中也很难看出这个东西凭什么就是真或者假的. 因此, 我们要先考虑真假的证据, 也就是这个语言的结构. 这里我们不得不借助元语言中的朴素集合论的帮助.

定义 2.3.1 (语言的结构). 一个语言 的结构是有限个集族构成的集族的集合 , 满足

1.

是一个集合, 我们称之为论域, 又称为宇宙.

2.

里面, 对应于语言里每个 元谓词 都有指定唯一的一个集合 , 且这就是它的全部.

3.

里面, 对应于语言里每个 元函数 都有指定唯一的一个函数 , 且这就是它的全部.

4.

里面, 对应于语言里每个常元 都有指定唯一的一个 , 且这就是它的全部.

不难看出, 这其实就是给语言配上了一个集合论意义下的实例, 每个语言里的东西都可以经过这个实例翻译成集合论里的东西. 注意, 结构是元的对象. 我们的对象语言 只有在我们元语言人的帮助下才能提升到它身上.

现在我们来定义赋值的概念, 并依此得出语义蕴含的概念. 我们给出的这个定义方式的核心是由 Tarski 在 1933 年给出的.

定义 2.3.2 (语义蕴含). 我们先来定义赋值. 结构 上的一个初始赋值 是一个从全体变元的集合映到这结构的论域 的一个映射. 现在我们来定义这个初始赋值对应的赋值 , 它把对象语言能构造的对象按以下方式提升到某些元语言对象中:

首先, 每个项都将变成一个 中的元素, 按以下方式递归定义:

1.

对每个变元符号 , 定义

2.

对每个常数符号 , 定义

3.

如果 是项, 元函数符号 将给出项 , 定义

然后, 每个原子公式 (没有量词和逻辑连接词的公式) 都会被判断:

1.

判断 为真, 记为 , 当且仅当

2.

当且仅当

可以看出, 我们就是用元语言重新解释了对象语言里的公式, 从而在元语言里面进行了判断.

最后, 每个公式都会被判断:

1.

当且仅当 不判断 为真, 也就是判断为假, 后者又记为

2.

当且仅当 或者

3.

当且仅当对任何 , 有 , 其中 是一个新增的从初始赋值函数 延拓到的对所有句子长度小于 的句子有定义的赋值函数, 而 把除了 之外的变元都按 的方式一样的映入 , 只是把 改成了映射到 .

这样, 判断的定义的合理性还需要对句子长度归纳一番, 这工作交由读者自己进行. 不难发现我们的定义还是仅仅是把对象语言的判断提升为元语言的判断, 但是元语言里的判断是我们先验直观而有所把握的.

我们今后不区分初始赋值 与它对应的赋值 .

这里的 还不能按习惯称之为语义蕴含, 因为左边输进来的东西不对. 我们还要进一步定义.

我们称公式集 语义蕴含公式 , 记作 , 如果对任何结构 和任何赋值 , 如果有 , 换言之判断 中每个公式为真, 则它一定还判断 为真.

语义蕴含最神奇的地方在于以下定理及其推论.

定理 2.3.3 (自由出现的决定性). 固定结构 , 如果如果两个赋值在一个公式的所有自由出现变元上取相同的值, 则 当且仅当

证明. 对公式的结构和长度进行归纳证明, 细节交予读者自证.

推论 2.3.4. 固定结构 , 对任何语句 , 注意到它没有自由变元, 故要不然它对任何赋值都真, 要不然对任何赋值都假. 我们将这两种情况简记为 .

2.4可靠性与完备性

很显然, 这一节的主要目的是像证明零阶语言即命题逻辑的可靠性和完备性一样, 试着证明一阶逻辑的可靠性与完备性. Gödel 于 1929 年首次得到了完备性的证明, 并在 1930 年公之于世. 我们将要给出的证明方法则是 Henkin 在 1949 年提出的. 看到这些人物的名字, 读者大约能猜到这个定理并不好证.

首先, 我们还是证一下可靠性. 由于语言更复杂了, 公理的数目大大增多, 可靠性也没有之前那么显然. 先来看一个引理.

引理 2.4.1 (替换引理). 如果项 可以在公式 中无冲突地替换变元 , 则 当且仅当 .

证明. 还是对公式 实行归纳.

1.

形如 . 此时
当且仅当
当且仅当
当且仅当
.

2.

形如 . 与上类似.

3.

形如 . 此时若 不在 中自由出现, 则由自由变元决定性显然. 下讨论自由出现的情形: 注意到无冲突替换要求 不在 出现且 中也可以无冲突替换, 这说明对任何 都有 . 又注意到 , 可如下做连续等价推导:

当且仅当对所有的 , 当且仅当 (归纳假设) 对所有的 , 当且仅当对所有的 , 当且仅当对所有的 , 当且仅当 .

4.

形如 . 此时 当且仅当 当且仅当 当且仅当 .

5.

形如 . 类上.

下面来证明可靠性.

定理 2.4.2 (可靠性定理). 一阶逻辑是可靠的. 换言之, 蕴含 .

证明. 首先, 分离规则保持有效性是显然的, 因此只需要证明每条公理都普遍有效 (valid). 换言之, .

由于公理有好几种, 而且还允许任意全称概括, 我们需要把这个定理归纳地拆成几个部分来证明.

(1) 第一组公理, 即从命题逻辑中继承的公理的有效性: 只需注意到赋值在所有素公式 (没有逻辑连接词的公式) 上的取值可以决定它在所有公式上的取值.

(2) 第二组公理: 我们已知的是 , 欲证的则是 , 而根据替换引理只要证 , 而这只要按定义展开条件中的全称量词, 然后选取 即可.

(3) 第三组公理: 拆开 的定义, 在每个 上面分离, 显然.

(4) 第四组公理: 拆开 的定义, 由自由出现变元的决定性显然.

(5) 第五组公理: 显然.

(6) 第六组公理: 考察所有满足 的模型与赋值, 不难归纳得出它在每个项上都可以将任意个 替换为 而不改变真假, 进而原子公式, 进而素公式, 进而全体公式.

最后还要证明, 普遍有效当且仅当它的某个全称概括 普遍有效, 而这由普遍有效的定义不难证明.

接下来证明完备性定理. 我们当然还是模仿在命题逻辑中使用的方法, 先使用以下引理.

引理 2.4.3. 一阶逻辑完备当且仅当任意一个一致的公式集都是可满足的.

其证明与命题逻辑中的证明也类似, 这里略去. 下面再证明三个可能用到的元定理.

引理 2.4.4 (常数概括引理)., 而常元符号 不在 中出现, 则存在同样不在 中出现的变元符号 , 使得 . 更进一步, 还存在一个 的不包含 的推演序列.

证明. 我们先证明前面. 考虑 的推演序列 . 有限个公式只出现有限个变元, 所以我们随便拿一个没出现在这些公式中的变元 , 不难发现 的一个推演序列.

下面验证更进一步的部分. 由于推演序列是有限长度的, 我们一定有一个 为有限集, , 进而 , 进而直接从这里就能由概括公理得出 , 而这一步也没有加入新的常数符号, 所以 的这个推演序列没用到 .

引理 2.4.5 (循环替换引理). 如果变元 不在公式 中出现, 则变元 可以在公式 中无冲突地替换 , 且 .

证明. 只要无冲突替换成立, 由简单的字符串操作就不难证明最后的式子. 而由于 里根本不出现 , 无冲突替换性由简单的归纳就能证出来.

引理 2.4.6 (约束变元替换引理). 如果有公式 , 变元 和项 , 则存在公式 , 它和 只有某些约束变元不一样, 而且满足

(1), ;

(2) 可以在 中无冲突地替换 .

证明. 固定 , 我们递归地构造 . 对未提到的情况, 我们构造的 都是完全不改变句子结构的, 原子公式甚至不改变句子.

对于 形如 的情况, 我们由归纳假设选一个 然后再选一个 中都没出现过的变元 , 定义 .

现在只需要递归证明这个构造确实合理. 这里只录入最重要的量词情况的 (1) 的证明, 别的都很简单留给读者自己证明.

首先根据归纳假设, , 于是 , 又因为 不出现, 而 , 概括得到 , 于是 .

另一方面, 有归纳假设 . 显然有 , 由 不出现可用循环替换得到 , 进而 , 最后由 不在左边自由出现可以概括为 .

现在我们准备充分, 向完备性定理发起挑战.

定理 2.4.7 (Gödel 完备性定理). 一阶逻辑是完备的.

证明. 只要证明一致则可满足. 假定有一个一致的公式集 , 我们自然的想像命题逻辑一样得到极大一致集, 然后构造一个结构, 最后得到一个赋值, 来满足这个公式集. 以下默认理论有等词, 因为没有等词的理论显然更简单.

Step1. 扩充得到极大一致集

为了能最后能得到结构, 我们必须给这个极大一致集附带一些额外的东西. 具体而言, 我们向原来的语言 中加入可数多个新的常元符号 , 从而它们不在 的任何公式中出现. 我们记 为扩充后的语言.

首先, 中一致. 证明是用反证法, 若它变得不一致了, 那把推演序列里的新常元用常数概括引理改成变元, 就会得到 中不一致的证据, 矛盾.

接下来添加 Henkin 公理. 我们 (由可数性) 列举 中全体 (公式, 变元) 的有序对为 . 我们递归地令

1.

, 其中 是第一个不在 中出现的新常元.

2.

, 其中 是第一个
中都没出现过的新常元符号.

我们记 , 然后来验证 一致.

反证. 如果不一致, 由证明序列的有限性一定可以找到一个最小的 使得 不一致. 由反证法元定理, 这指出 . 假定 , 则 , 由定义 不在左边出现, 于是常数概括得到 , 这与 极小是矛盾的.

类似 Lindenbaum 定理, 我们通过枚举句子做 的极大一致扩张 , 并且从过程中得到它对语法蕴含封闭 (即 指出 ).

Step2. 构造无等词公式的解释

这个结构非常有趣, 因为这个结构就是我们语言里面的东西.

上所有项的集合为 , 定义二元关系 , 对谓词 定义 , 对函数 定义 , 对常数 定义 , 得到结构 . 最后定义初始赋值 把变元 变到它自己这个项 上面, 并令其扩展, 得到结构 上的赋值 .

注意, 这个 也可以当成是我们给 添加的一个新的二元谓词.

我们证明: 对任意公式 , 当且仅当 , 其中 是在 中把等词 换成 得到的公式.

(1) 通过对项归纳不难得知 .

接下来对公式 实行归纳, 证明 当且仅当 . 我们还是只证明最复杂的量词情形, 把其他简单情形交由读者自行完成. 假设 .

(2) 从左向右; 由定义 有一条对应的 Henkin 公理 . 注意 , 我们有 蕴含 由替换引理蕴含 蕴含 由假设蕴含 蕴含 由封闭性和 Henkin 公理蕴含 蕴含 .

(3) 从右向左: 我们来证明逆否. 若 , 我们想证明 . 条件中拆掉 的定义已经给我们了一个反例项 , 满足 . 运用约束变元替代引理, 选择一个 , 它与 的差别只有约束变元, 而且 中可以无冲突地替代 . 做连续推导: 由语义等价推出 由替换引理推出 由归纳假设就得到 推出 推出 .

Step3. 构造一般公式的解释

注意上面已经证明了无等词公式的完备性. 由于等词和元语言的等于不一样, 直接做会出事, 我们要考虑一个商结构. 首先, 读者不难验证, 上的一个等价关系, 且和每个谓词和函数都是相容的 (即相等的东西判断/映射到同一个东西).

我们重新定义结构 的论域为 , 谓词 对应 , 函数 对应 , 常元 对应 . 定义初始赋值 , 然后令其自然地延拓为赋值. 我们只要证明:

对任意公式 , 当且仅当 .

归纳验证是惯常的归纳, 注意我们可以引用 中已经证明的结论来简化过程.