使用一阶逻辑构建分辨证明

我有一个即将到来的考试的复习问题,希望能得到一些帮助。我需要使用分辨法回答“玛丽只用绿苹果做馅饼”这个查询。我当前的知识库和语言是以下句子:

Mary only uses apples from John to make pies: ∀π,a(Apple(a) ∧ Pie(π) ∧ Make(M,π,a) => Grows(J,a))(⌐Apple(a) V ⌐Pie(π) V ⌐Make(M, π, a) V Grows(J,a))    (in CNF)

最新更新:

我会尽量更具体一些。我想要证明的是“玛丽只用绿苹果做馅饼”。写出这个逻辑,我得到:

Mary only uses green apples to make pies: π,a Pie(π) A Make(M, π, a) => Green(a)

将其翻译成CNF形式的步骤(http://en.wikipedia.org/wiki/Conjunctive_normal_form):

π,a ⌐(Pie(π) A Make(M, π, a)) V Green(a) π,a (⌐Pie(π) V ⌐Make(M, π, a)) V Green(a) (⌐Pie(π) V ⌐Make(M, π, a)) V Green(a) ⌐Pie(π) V ⌐Make(M, π, a) V Green(a) (CNF form)

这个陈述的否定形式在CNF形式中(我们将在分辨证明中使用):

Pie(π) A Make(M, π, a) A ⌐Green(a)

现在在使用一阶逻辑的分辨法时:(http://en.wikipedia.org/wiki/Resolution_(logic))

这是对的吗?还是我弄错了?


回答:

我不确定你是否正确地处理了这个问题。第一步是将三个陈述(“苹果要么是绿色的,要么是红色的”,“约翰只种植绿苹果”,“玛丽只用约翰的苹果做馅饼”)编码成子句形式,你还没有这样做。

第二步是将你试图证明的陈述的否定(“玛丽只用绿苹果做馅饼”)也编码成子句形式。我认为你没有这样做,我认为你编码的是正面陈述。也许我错过了什么。但是对查询陈述的否定编码最终会得到四个用AND连接的简短陈述,每个都可以作为知识库中的一个陈述来处理。

从那里开始,简化就是机械的过程了。

更新: 再一次,你需要添加你试图证明的陈述的否定。你没有这样做,你添加了陈述本身和另一个关于苹果是绿色的陈述。不要这样做。你不是在试图证明关于苹果是绿色的陈述,你是在试图证明关于玛丽只用绿苹果做馅饼的陈述。否定那个陈述,与你的其他三个知识库陈述一起进行分辨,并提取出矛盾(也就是说,将X和非X一起分辨,对于某个陈述X)。

这就是算法。它有效。如果你不这样做,无论你“需要”与否,你做的都是分辨算法之外的事情,如果我在评分你的作业/考试,我会判定为错误。

更新2:你越来越接近了,但你的查询陈述需要增加一个关于a是苹果(即,Apple(a))的额外子句,因为你的其他几个陈述已经有了。它应该看起来几乎和关于玛丽只用约翰的苹果的陈述一样(然后因为它是查询而被否定)。它的形式是正确的,小子句用AND连接,你只是缺少了一个。

但是一旦你有了那个,请注意,每个小子句(因为它们是用AND连接的)都可以作为知识库中的独立陈述来处理。所以例如,按照你现在的表述,你可以将Pie(p)与你的第三个陈述的表达式进行分辨。分辨证明中有很多步骤,但是一旦你完全编码了查询否定,它们都是像这样的微小步骤。

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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