用最通用统一符 (mgu)实现统一算法
子句范式
在 Skolemisation 之后,我们也可以去掉全称量词,子句范式中的公式本质上是 CNF 公式,其中文字是谓词逻辑的原子公式
我们为子句范式写 CNF,为 Skolem 范式写 SNF子句范式算法
第 1 步:以 prenex 形式引入公式
步骤 2:skolemise,然后删除全称量词
第三步:转化为CNF
最通用统一符 (mgu)
让 s 和 t 成为术语,如果 sσ = tσ,则替换 σ 是 s 和 t 的统一符
统一符 σ 是 s 和 t 的最一般统一符 (mgu) 如果对于所有统一符 ρ,s 和 t 存在一个替换 τ 使得 ρ = τ ◦ σ.直观地,两个术语的任何统一词都可以从它们的 mgu 中获得通过进一步实例化可以证明任何两个项都有一个mgu
例子
f (g(x, b), f (x, z)) 和 f (y, f (g(a, b), c)) 的 mgu 是多少?
它们都是 f (arg1, arg2) 的形式。
统一两个 arg2 需要 f (x, z) ≈ f (g(a, b), c)。 这反过来又需要
x 7→ g(a, b) 和 z 7→ c。 统一两个 arg1 需要 y 7→ g(x, b),其中转映射到 g(g(a, b), b),因为 x 7→ g(a, b)。 把这些比特放在一起给了我们统一实例 f (g(g(a, b), b), f (g(a, b), c))
统一算法
我们计算集合 s1 ≈ t1, 的同时 mgu。 . .sn ≈ tn,即我们想要
找到一个 σ,它将同时将每个 si 与相应的 ti 统一起来
. 我们写E 对于这样的集合和 E,s ≈ t 对于 E ∪ {s ≈ t}
谓词逻辑的解析
在所有申请中,场所必须重新命名:,它们的变量必须是不相交的.但是,仅此规则并不完全反驳:
Γ = {{P(x), P(y)}, {¬P(a), ¬P(b)}} 不可满足.但 Γ 中的所有子句,Γ∗ 至少有两个字面量. 因此 □ 不能单独通过分辨率计算
为了克服这类问题,我们有时需要使用因式分解。 这表示使用推理规则