命题逻辑中的归结算法是如何工作的?

我一直没能理解命题逻辑中的归结规则。归结仅仅是陈述一些规则,通过这些规则可以将一个句子扩展并以另一种形式写出吗?
下面是一个简单的命题逻辑归结算法。该函数通过解析两个输入返回所有可能的子句集。我无法理解这个算法的工作原理,有人能给我解释一下吗?

  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                                                                           

回答:

这是一个可以讨论的主题,但我会试着用一个简单的例子来解释给你听。

你的算法的输入是KB – 用于执行归结的一组规则。很容易理解它是一组事实,比如说:

  1. 苹果是红色的
  2. 如果某物是红色的,那么这件东西是甜的

我们引入两个谓词 R(x) – (x 是红色的) 和 S(x) – (x 是甜的)。然后我们可以用正式语言写出我们的事实:

  1. R('apple')
  2. R(X) -> S(X)

我们可以将第二个事实替换为 ¬R v S,以便符合归结规则的要求。

你的程序中的计算归结步骤会删除两个相反的事实:

例子:1) a & ¬a -> empty。2) a('b') & ¬a(x) v s(x) -> S('b')

注意在第二个例子中,变量 x 被实际值 'b' 替代。

我们程序的目标是确定句子苹果是甜的是否为真。我们也用正式语言将这个句子写成 S('apple'),并以其否定形式提问。然后问题的正式定义是:

  • CLAUSE1 = R('apple')
  • CLAUSE2 = ¬R(X) v S(X)
  • Goal? = ¬S('apple')

算法的工作原理如下:

  1. 取子句 c1 和 c2
  2. 计算 c1 和 c2 的归结得到新子句 c3 = S('apple')
  3. 计算 c3 和目标的归结得到空集。

这意味着我们的句子是真的。如果你无法通过这样的归结得到空集,那就意味着句子是假的(但在大多数实际应用中,这通常是由于知识库中的事实不足)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注