一阶逻辑公式(Skolemisation)
概述
解析可以扩展到谓词逻辑
但它不产生决策过程(谓词逻辑不可判定)
但首先 。对于命题解析,我们需要将公式放入合取范式形式.同样,我们需要将一阶句子带入从句范式
重命名
如果没有变量同时出现在公式中并且如果不同,则公式被重命名,量词的出现绑定不同的变量,每个公式都相当于一个重命名的公式,我们从此假设所有公式都被重命名
Prenex 范式
谓词逻辑的公式是 prenex 范式,如果它是形式Q1x1 . . Qnxn.φ 对于 Qi ∈ {∀, ∃} 和 φ 是无量词的
每个重命名的公式都等价于 prenex 范式中的公式
证明:重命名以确保 x 在 ψ 中不是自由的,然后重写:
(∀x.φ) ∧ ψ ≡ ∀x.(φ ∧ ψ)
(∀x.φ) ∨ ψ ≡ ∀x.(φ ∨ ψ)
(∃x.φ) ∧ ψ ≡ ∃x.(φ ∧ ψ)
(∃x.φ) ∨ ψ ≡ ∃x.(φ ∨ ψ)
(∀x.φ) ∧ (∀y.ψ) ≡ ∀x.(φ ∧ ψ)
(∃x.φ) ∨ (∃y.ψ) ≡ ∃x.(φ ∨ ψ)
prenex范式算法有以下步骤:
步骤 1 重命名公式
步骤 2 转化为否定范式
步骤 3 使用上述等价将所有量词拉到前面
注意:我们默认 prenex nf 中的公式在否定 nf 中也是如此
斯科莱姆化(Skolemisation)
接下来我们希望删除量词前缀
这种转换保留(不)可满足性,但不保留等价性一个公式是 Skolem 范式,如果它是 prenex 范式并且包含仅全称量词
在算法上,我们用新的 Skolem 函数和常量替换 ∃
∀x1 . . . ∀xn∃y.φ ⇝ ∀x1 . . . ∀xn. φ[f (x1, . . . , xn)/y]
∃y.φ ⇝ φ[c/y]
Skolemisation:直观的解释
考虑语句 ∃x.P(x):
如果这是可满足的,那么一定有某个值 c 使得 P© 成立。
我们不是从一般陈述 ∃x.P(x) 推理,而是推理从事实 P©。 我们把它留给其他人来计算c是什么。
类似地,如果 ∀x.∃y.P(x, y) 是可满足的:
这意味着每当有人给我们一个值 x 时,一定有一些对应的值 y 使 P(x, y) 起作用。 我们可以说 y = f (x) 对于一些我们让别人担心的函数 f。我们将 ∀x.∃y.P(x, y) 替换为 ∀x.P(x, f (x)) 并据此推断。
Skolemisation:例子
给定∃x.(¬P(a) ∨ P(x)),用一个新的“Skolem 常数”c 替换 x
使公式起作用。 这给出了¬P(a) ∨ P©。 [第一个公式有效;第二个只能满足。]
一阶逻辑公式的转换包括以下步骤:(1)用常数替换自由变量,(2)用一个 Skolem 函数,以及 (3) 用 Skolem 函数替换由位于奇数个否定范围内的全称量词约束的任何变量。
Skolem范式:例子
在我们解释 f 之前,我们需要知道我们使用的是什么模型。
考虑: ∀m.∃n.(m < n) ⇝ ∀m.(m < f (m)) 其中 f 是一个新的一元 Skolem 函数。
假设 < 在自然数中表示“小于”我们可以取 f (m) = m + 1;假设 < 表示集合论中的“适当子集”我们可以对任何 c ̸∈ m 取 f (m) = m ∪ {c}
在自然数中,这与说 ∀a.(f (a) < a) 相同。 这不可能满足自然数,因为取 a = 0 将给出 f (a) < 0,即是不可能的。 因此原始陈述无效