解决算法如何适用于命题逻辑?

Posted

技术标签:

【中文标题】解决算法如何适用于命题逻辑?【英文标题】:How does a Resolution algorithm work for propositional logic? 【发布时间】:2012-09-09 18:16:20 【问题描述】:

我一直无法理解命题逻辑中的解析规则是什么。解析是否只是陈述了一些规则,通过这些规则可以扩展句子并以另一种形式书写? 以下是命题逻辑的简单解析算法。该函数返回通过解析它的 2 输入获得的所有可能子句的集合。我无法理解算法的工作原理,有人可以向我解释一下吗?

  function PL-RESOLUTION(KB,α) returns true or false
     inputs: KB, the knowledge base, a sentence α in propositional logic, the query, a
             sentence in propositional logic 
     clauses <--- the set of clauses in the CNF representation of KB ∧ ¬α
     new <--- 
     loop do
        for each Ci, Cj in clauses do
            resolvents <----- PL-RESOLVE(Ci, Cj)
            if resolvents contains the empty clause then return true
            new <--- new ∪ resolvents
        if new ⊆ clauses then return false
        clauses <---- clauses  ∪ new                                                                           

【问题讨论】:

【参考方案1】:

这是一个完整的讨论主题,但我将尝试向您解释一个简单的示例。

算法的输入是 KB - 一组执行解析的规则。很容易理解为一组事实,例如:

    苹果是红色的 如果 smth是红色的那么这个smth是甜蜜的

我们引入两个谓词R(x) - (x is red) 和S(x) - (x is sweet)。比我们可以用正式语言写下我们的事实:

    R('apple') R(X) -&gt; S(X)

我们可以将第二个事实替换为¬R v S 以符合解析规则。

在您的程序中计算解析步骤会删除两个相反的事实:

示例:1) a &amp; ¬a -&gt; empty。 2)a('b') &amp; ¬a(x) v s(x) -&gt; S('b')

注意第二个示例变量 x 替换为实际值 'b'

我们程序的目标是确定句子 apple is sweet 是否为真。我们也用正式语言将这句话写成S('apple'),并以倒置状态询问。那么问题的正式定义是:

条款 1 = R('apple') 条款 2 = ¬R(X) v S(X) 目标? = ¬S('apple')

算法的工作原理如下:

    以子句 c1 和 c2 为例 计算 c1 和 c2 的解析器给出新的子句 c3 = S('apple') 计算 c3 的解析器,目标为我们提供空集。

这意味着我们的句子是正确的。如果你不能用这样的分辨率得到空集,这意味着句子是错误的(但对于实际应用中的大多数情况,它缺乏 KB 事实)。

【讨论】:

当 2 个子句传递给 resolve 函数时会发生什么?在 PL-RESOLVE(Ci, Cj) 应用解析规则。它删除所有对立的谓词(即A¬A)并为其余的返回CNF。 哪些子句是 Ci 和 Cj ?它们是Clauses中2组的对应子句吗? clauses 是一组子句。 CiCj 是该集合中的子句,例如 i != j 我花了太多时间试图找出 PL-RESOLVE(Ci, Cj) 做了什么,但您的评论有所帮助。谢谢@mishadoff!【参考方案2】:

考虑子句 X 和 Y,其中 X = a, x1, x2, ..., xm 和 Y = ~a, y1, y2, ..., yn,其中 a 是一个变量,~ a 是它的否定,而 xi 和 yi 是文字(即可能否定的变量)。

X 的解释是命题 (a \/ x1 \/ x2 \/ ... \/ xm)——也就是说,假设 X 为真,至少 a 或 xi 之一必须为真. Y 也是如此。

我们假设 X 和 Y 为真。

我们也知道 (a \/ ~a) 始终为真,无论 a 的值如何。

如果~a为真,则a为假,所以~a /\ X => x1, x2, ..., xm。

如果 a 为真,则 ~a 为假。在这种情况下 a /\ Y => y1, y2, ..., yn。

因此,我们知道 x1, x2, ..., xm, y1, y2, ..., yn 必须为真,假设 X 和 Y 为真。注意 new 子句没有引用变量 a。

这种推论称为决议。

这在基于分辨率的定理证明器中如何工作?很简单:我们使用反证法。也就是说,我们首先将我们的“事实”变成从句,并添加与我们的“目标”否定相对应的从句。那么,如果我们最终可以解决空子句 ,我们将遇到矛盾,因为空子句等同于虚假。因为事实是给定的,这意味着我们否定的目标一定是错误的,因此(未否定的)目标一定是真的。

【讨论】:

【参考方案3】:

解析是用于证明可在谓词逻辑中表达的论点正确的过程 解决导致了命题逻辑中句子的反驳定理证明技术。 resolution 提供了驳斥证明。即为了证明它是有效的,决议试图证明对陈述的否定会产生与已知陈述的矛盾 算法: 1)。将公理的所有命题转换为从句形式 2)。否定命题并将结果转换为子句形式 3) 解决它们 4)如果resolvent是空子句,则发现矛盾

【讨论】:

以上是关于解决算法如何适用于命题逻辑?的主要内容,如果未能解决你的问题,请参考以下文章

逻辑回归和SVM的区别是啥?各适用于解决啥问题

为啥逻辑适用于函数但不使用类,合并排序算法

浅析逻辑代数命题逻辑一阶逻辑高阶逻辑和数理逻辑

《离散数学》-命题逻辑-等值运算公式

证明或反驳量词(命题逻辑)

谓词逻辑