2.2. 一阶逻辑的语法
我们先来考虑一类最简单的逻辑系统, 它容许有穷长的公式.
语言对象的定义
定义 2.2.0.1. 一个一阶语言要求提供以下资料:
1. | 一个固定的可列集 , 这里面的元素称为变元符号. |
2. | 一个固定的集合 , 最后的逗号是这个集合中的元素. |
3. | 一个集合 和一个 , 中的元素称为函数符号, 给它的值称为这个函数的元数. |
4. | 一个集合 和一个 , 中的元素称为谓词符号, 给它的值称为这个谓词的元数. |
不妨要求它们两两不交. 我们将它们合计为 , 但很多时候我们会根据上下文来确定元数, 所以也会写 .
我们将记它的字符表为 , 因为我们已经默认了这些集合两两不交因此我们也默认可以从一个字符 直接看出它是以上四个集合中哪一个集合中的元素.
我们将记 中的元素 为 , 称为一个字符串. 字符串的串接操作我们记为 , 即 .
我们称 为这个语言的基数.
评注. 如果没有选择公理, 与 上面是否有良序就可能造成阻碍, 我们会默认它们是良序化了的. 我们会用 来指代这个语言中的刚才的定义中提到的指标集 , 同样的记法可以在符号使用过多的时候避免一定的困惑, 就好像是在访问一个结构体的内部对象一样.
定义 2.2.0.2. 给定一个 , 我们要指定其中一些具有特殊意义的字符串.
我们如下递归地定义项:
1. | 是项. |
2. | 如果 是项, 是 元函数符号, 则 是项. |
所有项构成的集合不妨记为 .
我们如下递归地定义公式:
1. | 如果 是项, 则 是公式. |
2. | 如果 是项, 是 元谓词符号, 则 是公式. |
3. | 如果 是公式, 则 是公式. |
4. | 如果 和 是公式, 则 是公式. |
5. | 如果 是公式, 是变元符号, 则 是公式. |
所有公式构成的集合不妨记为 . 全体形如 或 的公式均称为原子公式, 构成的集合记为 . 不含量词 的公式称作无量词公式, 全体无量词公式构成的集记为 .
由于显而易见的原因, 今后我们会在元语言里面直接操作字符串, 例如 就会直接写成 .
评注. 这里的递归定义基于以下事实: 有一个天然的良序, 进而 上也有一个天然的良序. 我们所做的事就是在这个良序上给出一个判断, 指出每个字符串是项或者不是项, 是公式或者不是公式. 如果你不会构造 上的这个良序, 可以看定理 5.7.13.
证明
接下来是证明的概念, 我们目前还是先用 Hilbert 式的推演系统. 首先我们复刻之前定义过的对公式的操作.
定义 2.2.0.3 (自由出现). 我们称变元 在公式 中出现, 若 . 由于 有穷, 我们得到一个函数 , 这里 , 它指出出现在这个公式中的全体变元.
对每个变元 , 我们对公式 递归地定义 , 称作 在 中自由出现, 如下:
1. | 在 中自由出现当且仅当它出现. |
2. | 在 中自由出现当且仅当它出现. |
3. | 在 中自由出现当且仅当它在 中自由出现. |
4. | 在 中自由出现当且仅当它在 或 中自由出现. |
5. | 在 中自由出现当且仅当它在 中自由出现且 不是 . |
自然地, 我们定义的这个性质给出一个函数 , 它指出自由出现在这个公式中的全体变元. 我们有时也会写 以指出 .
如果 , 则称 是一个闭公式, 或者称之为一个语句. 通常我们用 等符号表示语句, 全体语句构成 的子集 .
定义 2.2.0.4 (无冲突替换). 给定 与 , 我们定义一个操作 , 它递归地将公式变为另一个公式:
1. | 是 这一字符串中所有 出现的地方都将 替换为 得到的新公式. 具体而言, 我们将 分解为 , 使得 中 均不出现, 然后令 |
2. | 是 这一字符串中所有 出现的地方都将 替换为 得到的新公式, 具体操作同上. |
3. | 是 . |
4. | 是 . |
5. | 若 则 仍然是是 , 若 则 是 . |
我们继续递归地对每个公式 定义 对 是否是无冲突替换.
1. | 形如 的公式 , 对 总是无冲突替换. |
2. | 形如 的公式 , 对 总是无冲突替换. |
3. | 形如 的公式 , 对 是无冲突替换当且仅当 对 是无冲突替换. |
4. | 形如 的公式 , 对 是无冲突替换当且仅当 对 和 都是无冲突替换. |
5. | 形如 的公式 , 对 是无冲突替换当且仅当 不在 中自由出现, 或 对 是无冲突替换且 不在 中出现. |
我们将在无冲突替换时将 写成 以示区别.
评注. 我们写 指的是这两个字符是同一个字符, 这与公式 不一样.
定义 2.2.0.5 (逻辑公理). 对任何公式 , 每个形如 的公式都称为 的全称概括, 这里 是任意 个自然数, 也是自然数. 的全体全称概括构成的集合记为 , 称为 的全称闭包.
我们称以下六类公式的全称概括为逻辑公理.
1. | , 这里 和 是任意两个公式. |
2. | , 这里 , 和 是任意三个公式. |
3. | , 这里 和 是任意两个公式. |
4. | , 这里 对 是无冲突替换. |
5. |
|
6. | , 这里 不在 中自由出现. |
7. | . |
8. | , 这里 是一个原子公式, 是把 中的一部分 替换为 得到的新的原子公式. 这个部分替换的具体细节可以参考之前我们定义替换时所做的操作. |
我们记所有逻辑公理构成的集合为 . Fol 是 first order logic 的首字母缩写.
定义 2.2.0.6. 满足以下条件的 中的元素 将被称作从公式集 到公式 的证明序列: 对于任意的 , 满足
1. | , 或 |
2. | , 或 |
3. | , 这个等号是指作为字符串相等. 这个行为又称作应用分离规则 (MP,Modus Ponens) 从 和 中得到 , 或者说是用 从 中分离出 . |
如果存在 到 的证明序列, 则称 证明 , 记为 . 我们将 简记为 .
定义 2.2.0.7. 的子集称作理论. 我们通常用 代表一个理论.
定义 2.2.0.8. 我们会把一个第七条逻辑公理的一个全称概括 记为 , 将 记为 .
对句子集 , 如果 , 则称 是一致的. 如果任给语句 都有 或 , 则称 是完全的. 注意, 完全性并不要求证明或证否每个公式.
证明的性质
我们来形式化一系列元定理, 换言之它们都是关于证明的定理. 下面提到的 默认是一个公式集.
定理 2.2.0.9 (证明的紧致性). 如果 , 则存在 的有穷子集 使得 .
定理 2.2.0.10 (演绎定理). 当且仅当 .
证明. 当是因为我们可以往证明序列里面加一个 , 然后用它从 中分离出 .
为了证明仅当, 我们设 是一个 到 的证明, 我们归纳地证明对每个 都有 即可.
1. | 如果 , 用 自己就可以直接从第一条逻辑公理中分离出 . |
2. | 如果 是由 从 中分离而来的, 根据归纳假设我们有 和 , 将这两个证明序列拼在一起, 然后用 从第二条逻辑公理中分离出 , 再用 从其中分离出 . |
定理 2.2.0.11 (概括定理). 如果 且 不在 的任何公式中自由出现, 则 .
证明. 假设 是 到 的证明序列, 我们归纳地证明对每个 都有 .
1. | 如果 , 则根据定义有 . |
2. | 如果 , 则我们可以用 从第六条逻辑公理中分离出 . |
3. | 如果 是由 从 中分离而来的, 根据归纳假设我们有 和 , 将这两个证明序列拼在一起, 然后用 从第五条逻辑公理中分离出 , 再用 从其中分离出 . |
评注. 可以看出, 演绎定理和概括定理的证明方法是完全一样的.
定理 2.2.0.12. 对任何公式 成立.
定义 2.2.0.13. 是 的简写, 是 的简写.
定理 2.2.0.14. 任给公式 和 , 我们总有以下定理:
1. |
|
2. |
|
3. |
|
4. |
|
5. |
|
6. |
|
7. |
|
类似的只用前三条逻辑公理就能证明的事实我们今后不再特别指出.
定理 2.2.0.15. 除了公理 外, 我们有以下定理:
1. |
|
2. |
|
3. | , 这里 是任意一个 元谓词符号. |
4. | , 这里 是任意一个 元函数符号. |
定理 2.2.0.16 (自由替换). 对任意 的自由变元 和任意项 , 总有 是无冲突替换.
定理 2.2.0.17 (循环替换). 如果 作为符号不在公式 中出现, 则对任意变元 总有 对 是无冲突替换, 且进一步有 就是 .
定理 2.2.0.18 (约束替换). 任给公式 , 项 与变元 , 我们总能构造一个公式 , 满足:
1. | 且 . |
2. | 对 是无冲突替换. |
证明. 固定 和 , 我们对 的结构作归纳.
1. | 形如 , 则令 . |
2. | 形如 , 则令 . |
3. | 形如 , 则令 . |
4. | 形如 , 则令 . |
5. | 形如 , 则新选一个不在 和 中出现且不同于 的新变元符号 , 令 . |
归纳地可见 与 仅仅是约束变元 (不自由的变元) 不同. 我们归纳地证明这个构造满足题中两个要求, 唯一值得注意的就是第五条归纳满足第一条要求的证明.
语言的扩张
定义 2.2.0.19. 我们称语言 是语言 的一个扩张, 或者 是 的收缩, 若 , 且 .
定义 2.2.0.20. 我们作以下简写方案.
1. | 写为 . |
2. | 写为 . |
3. | 写为 . |
4. | 写为 . |
5. | 写为 , 这里 在 中自由出现, 不在 中出现. |
定义 2.2.0.21. 给定语言 上的理论 , 再给定 作为 的扩张. 我们特别命名以下 句子:
1. | 一个 元谓词符号 的 定义指的是形如 的句子, 这里 是一个自由变元集包含于 的 公式. |
2. | 一个 元函数符号 的 定义指的是形如 的句子, 这里 是一个自由变元集包含于 的 公式. |
对函数符号 的 定义, 如果 , 则称 确证这个定义, 此时称这个定义是 定义. 谓词符号的定义无需确证条件也可直接称为 定义.
定义 2.2.0.22. 一个 的理论 称作 理论 的可定义扩张, 若:
1. | 是 的扩张, . |
2. | 存在一个从 ( 中不在 中的全体符号) 到 ( 中不属于 的全体句子) 的双射, 它给每个符号配备一个与之唯一对应的 定义. |
我们此时记 .
定义 2.2.0.23. 如果一个公式中所有的原子公式片段都形如 或 或 , 则称这是一个无嵌套公式.
定理 2.2.0.24. 任何公式 都存在一个典范的无嵌套公式 , 满足 .
证明.
定义 2.2.0.25. 对可定义扩张 , 我们记 为与 唯一对应的 定义, 同理记 .
我们来定义一个典范的翻译函数 如下:
1. |
定理 2.2.0.26 (可定义扩张的翻译). 对可定义扩张 , 总有 .
证明.
定理 2.2.0.27 (可定义扩张的保守性). 如果 , 则对任何 公式 , 总有 当且仅当 .
证明.