谓词逻辑:前束范式与推理演算
会把公式化成前束范式和 Skolem 标准形,熟悉基本推理公式,用全称指定、全称推广、存在指定、存在推广四条规则写证明,并会用合一与归结完成谓词逻辑的归结证明。
本节导读
上一节学会了把句子写成谓词公式,这一节学怎么用这些公式推理。大纲这一单元后三条是:范式(前束范式、Skolem 标准形)、基本推理公式及其证明方法、推理规则与推理演算(含归结推理法)。
谓词逻辑的证明推导题,常见的有两类:给出几句自然语言前提和结论,要求先形式化再写出推理过程;或者给出公式,要求化成前束范式、Skolem 标准形,再用归结法证明。学完你应该能熟练完成这两类题,并且知道四条量词规则各自的限制条件。
前束范式
如果一个公式的所有量词都在最前面,而且每个量词的辖域都延伸到公式末尾,它就是前束范式:Q1x1Q2x2⋯QkxkM,其中 Qi 是 ∀ 或 ∃,M 中不含量词。任何公式都有与它等值的前束范式,但写法不唯一。
化前束范式的步骤:一,消去 ↔,必要时消去 →;二,用量词否定等值式把否定号移到谓词前;三,用换名规则把所有约束变元改成互不相同、也不与自由变元重名的字母;四,用辖域扩张等值式把量词逐个提到最前面。第四步要特别小心:从蕴涵的前件提出的量词要换样,从后件提出的不变。
比如 ∀xF(x,y)→∃yG(x,y):前件里 x 约束、y 自由,后件里 x 自由、y 约束,先换名得 ∀uF(u,y)→∃vG(x,v);前件的 ∀u 提出来变成 ∃u,后件的 ∃v 不变,结果是 ∃u∃v(F(u,y)→G(x,v))。
Skolem 标准形
归结法要求公式里只剩全称量词,办法是把存在量词「消」掉。从前束范式出发,从左到右看每个存在量词 ∃y:如果它左边没有全称量词,就把 y 换成一个新的个体常项 a;如果它左边有全称量词 ∀x1,…,∀xk,就把 y 换成这些变元的新函数 f(x1,…,xk),叫 Skolem 函数。例如:
∃x∀y∃zP(x,y,z)化为∀yP(a,y,f(y))
这样得到的只含全称量词的公式,就是归结法用的 Skolem 标准形。它与原公式一般不等值,但可满足性相同:原公式不可满足,当且仅当它的 Skolem 标准形不可满足。归结法证明的正是「前提与结论的否定合起来不可满足」,所以用它不影响结论。有的教材还讲一种只含存在量词的标准形(消去全称量词、保持永真性),用途不同,答题时按题目的要求写。
基本推理公式
下面这些蕴涵式都是永真的,可以直接当作推理定律使用:
| 推理公式 | 说明 |
|---|---|
| ∀xA(x)∨∀xB(x)⇒∀x(A(x)∨B(x)) | 反方向不成立 |
| ∃x(A(x)∧B(x))⇒∃xA(x)∧∃xB(x) | 反方向不成立 |
| ∀x(A(x)→B(x))⇒∀xA(x)→∀xB(x) | 全称对蕴涵只能单向分配 |
| ∀x(A(x)→B(x))⇒∃xA(x)→∃xB(x) | 同上 |
| ∃y∀xA(x,y)⇒∀x∃yA(x,y) | 量词交换只有这一个方向 |
证明一个推理公式成立,可以用下面的推理规则写出证明;证明它不成立,就构造一个使前件真、后件假的解释。
四条量词推理规则
| 规则 | 形式 | 使用条件 |
|---|---|---|
| 全称指定(US) | 由 ∀xA(x) 得 A(y) 或 A(c) | 可以指定为任意个体变项或常项,替换后不能造成新的约束 |
| 全称推广(UG) | 由 A(y) 得 ∀xA(x) | y 必须代表任意个体:不能是存在指定引入的,也不能在前提里自由出现 |
| 存在指定(ES) | 由 ∃xA(x) 得 A(c) | c 必须是证明里之前没有出现过的新常项 |
| 存在推广(EG) | 由 A(c) 得 ∃xA(x) | x 不能在 A(c) 中已经出现 |
写证明的套路是:先用指定规则去掉量词,回到命题逻辑里推理,最后用推广规则加回量词。有一条经验很重要:同一个常项既要做存在指定、又要做全称指定时,先做存在指定,再做全称指定。原因是存在指定要求常项是新的,先用全称指定引入了 c,后面就不能再把 ∃x 指定成 c 了。
谓词逻辑的归结推理法
谓词逻辑的归结比命题逻辑多一步「合一」。替换是形如 {t1/x1,…,tn/xn} 的集合,表示把变元 xi 换成项 ti;能使两个文字变得完全相同的替换叫合一,其中最一般的那个叫最一般合一(mgu)。合一有一条限制:变元不能换成含有它自己的项,比如 x 不能换成 f(x)。
归结证明的步骤:一,把前提和结论的否定都化成前束范式,再化成 Skolem 标准形;二,去掉全称量词,把母式化成合取范式,拆成子句集;三,找一对谓词相同、一正一负的文字,求出 mgu,把替换作用到两个子句上再归结;四,直到得出空子句 □。例如前提 ∀x(P(x)→Q(x)) 和 P(a),结论 Q(a):子句集 {¬P(x)∨Q(x),P(a),¬Q(a)};第一、二个子句用 {a/x} 归结得 Q(a),再与 ¬Q(a) 归结得 □。
易错提醒
-
❌ 从蕴涵前件里提出全称量词时保持不变。✅ 前件里的 ∀ 提出来变成 ∃,∃ 提出来变成 ∀。因为 A→B 等值于 ¬A∨B,前件带着一个否定。
-
❌ 不换名就提量词,把两个量词的约束变元并成了一个。✅ 先换名,让所有约束变元互不相同。因为 ∀xF(x)∧∃xG(x) 直接提成 ∀x∃x 是错的。
-
❌ Skolem 化时把所有存在变元都换成常项。✅ 左边有全称量词的,换成这些全称变元的函数。因为 y 的取值可能随前面的 x 变化。
-
❌ 认为 Skolem 标准形与原式等值。✅ 二者只保持可满足性。因为引入的新常项、新函数是额外的假设。
-
❌ 先全称指定成 c,再把 ∃x 也指定成 c。✅ 先存在指定,再全称指定。因为存在指定必须引入新常项。
例题精讲
例题 1(前束范式与 Skolem 标准形)
求 ∀x(F(x)→∃yG(x,y))∧∃yH(y) 的前束范式和 Skolem 标准形。
答题要点示范:第二个 y 换名为 z:∀x(F(x)→∃yG(x,y))∧∃zH(z)。∃y 在后件里,直接提出;再把 ∃z 提到最前,得前束范式 ∃z∀x∃y((F(x)→G(x,y))∧H(z))。Skolem 化:z 左边没有全称量词,换成常项 a;y 左边有 ∀x,换成 f(x),得 ∀x((F(x)→G(x,f(x)))∧H(a))。
点评:前束范式不唯一。如果把 ∃z 放在 ∀x 的右边,Skolem 化时 z 就要换成 g(x),也对;先提存在量词,得到的 Skolem 函数更简单。
例题 2(证明推导)
所有程序员都懂算法;有的员工是程序员;所以,有的员工懂算法。设 P(x):x 是程序员,A(x):x 懂算法,E(x):x 是员工,写出推理过程。
答题要点示范:前提 ∀x(P(x)→A(x))、∃x(E(x)∧P(x)),结论 ∃x(E(x)∧A(x))。
(1) ∃x(E(x) ∧ P(x)) 前提引入
(2) E(c) ∧ P(c) (1) 存在指定
(3) ∀x(P(x) → A(x)) 前提引入
(4) P(c) → A(c) (3) 全称指定
(5) P(c) (2) 化简
(6) A(c) (4)(5) 假言推理
(7) E(c) (2) 化简
(8) E(c) ∧ A(c) (6)(7) 合取引入
(9) ∃x(E(x) ∧ A(x)) (8) 存在推广
点评:第(2)步先做存在指定,第(4)步再把全称量词指定成同一个 c,顺序不能反。
例题 3(归结推理)
用归结法证明:∀x(F(x)→G(x)),∀x(G(x)→H(x)),F(a) ⇒ H(a)。
答题要点示范:子句集 {¬F(x)∨G(x),¬G(y)∨H(y),F(a),¬H(a)}(第二个子句的变元换名为 y)。F(a) 与 ¬F(x)∨G(x) 用 {a/x} 归结得 G(a);G(a) 与 ¬G(y)∨H(y) 用 {a/y} 归结得 H(a);H(a) 与 ¬H(a) 归结得 □,得证。
点评:不同子句的变元互不相干,先换成不同字母再合一,可以避免把两个 x 误当成同一个。
本节小结
- 前束范式:消联结词、移否定、换名、提量词;从前件提出的量词要换样。
- Skolem 标准形:存在变元左边无全称量词换常项,有则换成那些全称变元的函数;只保持可满足性。
- 基本推理公式要记住方向:量词交换只有 ∃y∀x⇒∀x∃y。
- 四条规则:全称指定、全称推广、存在指定、存在推广;存在指定引入新常项,所以先存在指定后全称指定。
- 谓词归结:化子句集、求 mgu、归结到空子句;变元不能换成含它自己的项。
学完练一练
按本节考点从本课的课后练习里抽题(每次 10 道以内),做完看解析、错题自动进错题本。
本节内容由 AI 辅助编写,配图由 AI 生成,仅供备考参考;考试要求以《全国各类成人高等学校招生考试大纲(2024 年版)》及浙江省教育考试院当年公布为准。