为啥我们将没有一个是肯定的文字的析取称为目标从句?

Posted

技术标签:

【中文标题】为啥我们将没有一个是肯定的文字的析取称为目标从句?【英文标题】:Why do we call a disjunction of literals of which none is positive a goal clause?为什么我们将没有一个是肯定的文字的析取称为目标从句? 【发布时间】:2017-12-20 18:46:03 【问题描述】:

我想我知道 goal 子句horn 子句 的含义,但我很困惑为什么人们将一个没有肯定的文字的析取命名为 a 目标条款

这里的目标是什么?

【问题讨论】:

是的...我只是很困惑为什么将其命名为目标子句。 感谢您的 cmets。你说得对,我不熟悉逻辑语言。很抱歉,我不确定你提到的“条款的主要内容”。我只知道 horn 子句可以以暗示形式表达,但这仍然没有让我知道为什么在没有任何正面文字的情况下将 horn 子句命名为目标子句。你能解释一下吗,即使它可能不正确? 非常感谢您的关注。我会等:) 感兴趣的:http://www.learnprolognow.org/slides/official/Horn.pdf 感兴趣的:Excerpt 来自 D.W. 的“自动定理证明:逻辑”。拉夫兰 【参考方案1】:

Horn clauses共有三种类型

定子句:¬ p ∨ ¬ q ∨ ⋯ ∨ ¬ t ∨ u 事实:你 目标子句: ¬ p ∨ ¬ q ∨ ⋯ ∨ ¬ t

与 Prolog 有关。 来自Adventures in Prolog的示例Prolog

明确的子句是 Prolog rule:

where_food(X,Y) :-  
  location(X,Y),
  edible(X).

事实是 Prolog fact:

room(kitchen).

目标子句是 Prolog query:

location(X, kitchen), edible(X).

查看 Prolog 中三个常见的另一种方法是使用 headbody:-

规则是head :- body. 事实是head. 查询是body.

主体由对谓词(head)的调用组成,因此主体可以如下所示A,B,C

当您使用查询时,它确实是

goal :- body. 

goal <- A,B,C

location(X, kitchen), edible(X) ⊃ goal

Prolog 示例

事实

location(apple, kitchen).
location(crackers, kitchen).
location(flashlight, desk).

edible(apple).
edible(crackers).

目标条款

location(X, kitchen), edible(X).

回答

X = apple
X = crackers

较早的答案

从 Prolog 中的谓词开始

ancestor(X,Y) :- parent(X, Z) , ancestor(Z,Y).

其中ancestor(X,Y) 称为头子句,parent(X, Z) , ancestor(Z,Y) 称为主体。

将 Prolog 转换为蕴涵:-, 并且含义是相反的。

(parent(X,Z) ∧ ancestor(Z,Y)) ⊃ ancestor(X,Y) 

将文字的合取(∧)转换为文字的析取(∨)

not parent(X,Z) ∨ not ancestor(Z,Y) ∨ ancestor(X,Y) 

导致not parent(X,Z) ∨ not ancestor(Z,Y) 是 Prolog 正文或您的问题中的目标子句。

换句话说,目标子句是为了实现 Prolog 头 ancestor(X,Y) 的目标而需要满足的语句。

要查看使用 Prolog 祖先的示例,请参阅 Prolog/Recursive Rules。请注意,此示例中给出的规则只是用于定义祖先的两个规则之一,缺少的 Prolog 规则为 ancestor(A, B) :- parent(A, B).

参考文献

爱丁堡大学课程:自动推理学生的 Prolog 编程 - 第 10 讲 - Logic Programming

Goal clause 来自***的定义 -

a Horn clause without a positive literal is sometimes called a goal clause¬p ∨ ¬q ∨ ... ∨ ¬t

SWI-Prolog Glossary of Terms

Prolog/Recursive Rules

Foundations of Logic (WorldCat)

在线试用 Prolog

使用swish(已通过此链接输入 Prolog 规则) 在右下角 ?- 旁边写着 your query goes here ... 输入 ancestor(X, john). 然后在右下角点击Run! 在上面你应该看到约翰的祖先X=david 在该点击下方Next,您应该会看到另一个约翰的祖先X=jim 继续点击Next查看其他祖先,最后你应该看到 false 表示没有更多有效答案。

摘录

来自Logic Programming 弗兰克·普芬宁

为了实现从推理规则到逻辑编程的转变,我们 需要实施特定的策略。两个基本思想表明 他们自己:我们可以从猜想向后搜索, 向上生长(潜在的)证明树,或者我们可以向前工作 从应用规则的公理直到我们得出猜想。我们 将第一个称为目标导向,第二个称为前瞻性推理。

如何搜索

OP 评论

你能告诉我你是怎么做这些搜索的吗,因为当我遇到 一些复杂的问题我通常不知道如何搜索必要的 资源

通常我会让 OP(原始发帖人)作为另一个问题提出这个问题,但由于它是一个主观多于客观的问题,它会在 SO (***) 上被否决票和关闭票击落,我可以使用示例与原问题有关,所以我会在这里回答。

在寻找成功之路时,要弄清楚该领域专家当前使用的术语,以及该术语中的哪些关键词与您所寻求的内容相关。有时我会突然想到关键词,就像disjunction of literalsgoal 的问题一样,我知道它们是逻辑、推理、定理证明和逻辑语言中的关键术语。其他时候我是在猜测,或者像 question 一样在黑暗中。

在尝试学习当前术语时有时会取得成功的一种方法是搜索 review articles,它通常在标题中包含 survey,因此 survey 是一个很好的关键字。例如使用Semantic Scholar 和horn clause survey 在第一页找到Constraint Logic Programming: A Survey

作为搜索与math canonical form 相关性很小的数学表达式的规范形式的示例,但在发现standard from 更常用后,获得了更好的结果。

有时不是文字可以帮助您找到答案,而依赖文字的搜索引擎会让您失望。对于example,我每隔几周左右就会看到一种搜索类型,涉及查找模式/公式/等。它会生成一个数字序列,而您只知道序列的一部分,通常是序列的开头。这是使用OEIS(整数序列在线百科全书®)进行搜索时派上用场的。另一种与数学相关的搜索引擎是WolframAlpha。所以要注意还有其他类型的搜索引擎

一旦你有了关键词,那么正如@WillNess 所指出的,你有时将它们查询为单个词goal clause,但有时作为引号中的精确词"goal clause"。对于这个问题,使用确切的词会得到更好的结果。

接下来要意识到的是信息的来源通常与信息的质量相对应。

来自大学课程、在线数字科学图书馆和书籍的资源在我的 list 上很受欢迎 PDF(后记文档格式)。使用PDF的原因是用LaTeX写技术专业论文是很常见的,然后输出为PDF。旧格式是 PS(PostScript),但我很少在较新的论文中看到这种格式。因此,pdf 是一个很好的搜索词添加。 然后是来自创作者的网站,例如Ubuntu、SWI-Prolog 明显不错的网站,例如w3schools 专家的博客条目;大多数博客不是由专家撰写的。

我使用的与计算机科学技术论文相关的其他搜索引擎有:

CiteSeerX arxiv.org Google Scholar Microsoft Academic WorldCat Semantic Scholar dblp

当然你也可以随时查询其他academic search engines

如果您只有一两份文件对您有吸引力,但仍然没有足够的细节,那么请开始研究这些文件中注明的参考资料。这可能具有挑战性,因为多年前许多文章只发表在专业期刊上,不能免费获得。但是,如果其中一位作者是教授,通常可以免费找到这些文章,并且您可以在他们教授的公共页面下找到列出的文档。 CiteSeerX 非常适合查找参考文档。

如果您使用现有的 SO 答案,请检查标签以查看它们是否为 top answerer,并记住接受的答案可能不是最佳答案,任何答案都可能不是您问题的正确答案。

然后就是阅读几篇文章,看看哪些信息是最新的,是否有一致性。

即使在互联网过去 20 年的时间跨度内,某些领域也在快速发展和变化。这是一个paper 进行重大更改的示例。如果您不了解本文相关领域的论文,您可能会对论文之前发生的研究和基于论文的研究感到困惑。要查找此类论文,请注意大量引用,目前18658。

不要犹豫,花一个多小时来搜索,然后再花几个小时到一整天的时间来阅读。这是question 我花了四个多小时搜索和阅读,但仍然找不到答案。在终于用完了尝试的东西后,我发布了这个问题,却发现它无法完成并且没有记录。答案是我认识的一位 F# 专家。

最后不要害怕留下面包屑,例如你自己的个人笔记,就像我对Of interest: cmets 或在这个question 中所做的那样。您经常会一遍又一遍地使用相同的搜索词,如果您在 Internet 上发布的内容足够多,就会开始出现在您自己的帖子中。一段时间后你会意识到,如果你只把面包屑留在那里,那会让你的生活更轻松。

剩下的就是多年的经验和勤奋。

有时还会问一个 SO 问题,请求帮助了解使用哪些关键字有时会得到答案,有时会被击落。

【讨论】:

感谢您的帮助和时间。我是一名英语学习者,如果有任何误解,我很抱歉。非常感谢您向我详细解释了什么是角子句和目标子句。您提到目标子句是为了实现 Prolog 头祖先(X,Y)的目标而需要满足的语句。但对我来说,ancestor(X, Y) 更像是一个目标,而目标子句更像是一个前提。所以我仍然很困惑为什么人们将前提命名为目标条款? 谢谢你:)!你能告诉我你是怎么做这样的搜索的,因为当我遇到一些复杂的问题时,我通常不知道如何搜索必要的资源,但会问...... @SherwinChen 谷歌。例如this,或this 感谢您的帮助:) 非常感谢您分享您的个人经验和搜索见解。 @TasosPapastylianou 我很抱歉。我接受了它,因为我非常看重他的努力和他对搜索的洞察力——。我知道你的回答完美地解决了我的问题,我投了赞成票。再次抱歉:(【参考方案2】:

这是我个人的理解,但我会尽力传达。


“目标条款”背后的直觉是什么?为什么要这样称呼它?

首先让我们确认一些定义:

子句被定义为文字的析取。此外,由于析取运算符是关联的,也就是说,以下属性适用:

子句可以进一步被认为是“子”子句的析取,即像 , 可以“拆分”为代表“子”子句的两部分

一个喇叭子句被定义为一个子句最多一个正字面量;因此,它可以采用三种可识别的形式:

    “完整”形式: ,称为定性子句 缺少任何否定文字的表单: ,这被称为事实条款(或简称为事实)。 缺少正数文字的形式: ,称为目标子句

如果您比较表格 1 和表格 3,您会发现您可以将表格 1 分成两部分(或子条款):一个条款本质上是“目标条款”的形式,另一个条款是独立的正面文字,我们将其称为 head

此外,这个Horn子句可以重新排列成蕴涵形式如下:

蕴涵形式也可以称为“关系”,因为如果我们将这个特殊的角从句作为前提,我们基本上被告知“它适用于 如果第一部分是真的,那么第二部分也一定是真的”。

目标子句这个名字现在应该开始变得更有意义了。从自然演绎的规则我们知道,给定 , 如果我们也设法证明 ,那么我们可以推导出 。因此,给定一个蕴含形式的 horn 子句,其本质上为“Goal 蕴含 Head”,如果我们证明“Goal”为真,我们可以从逻辑上得出结论,Head 部分也必须为真。因此,Horn 子句的“目标”部分是我们需要发现它是否可满足的部分,以便得出结果是否为真。

请注意,我现在在 this 上下文中所指的“目标”不再采用“clause”形式,因为“目标”现在位于(正)文字的合取形式,与文字的析取相对。实际上,我现在所说的“目标”的逻辑陈述,我试图证明,实际上等同于对我们之前所说的“目标子句的否定。 "(即由否定文字的析取形成的语句)。所以我们可以把“目标子句”看作是子句形式的相关陈述,即对应于我们要证明的目标的否定;它是 Horn 子句的子句部分(当以“子句”形式编写时)被否定,从而产生蕴含形式的目标组件。


但是谈论目标和目标条款有什么意义。您是否曾经在数据库中获得过独立的“目标”/“目标子句”?

当然。请注意,独立“目标子句”语句等同于“目标意味着错误”语句(或者更重要的是,假设“目标”为真证明没有进一步/不会产生更多信息)。因此,一个独立的“目标条款”本质上等同于没有头部的目标,即满足时不能证明其他任何东西的目标。

如果我们有一个没有头部的目标,那么我们基本上被要求评估是否可以满足目标,但不会将其与需要推断的头部相关联。仅仅为了好玩而必须评估目标的想法可能听起来很奇怪,但在 Prolog 术语中,当您意识到 some 谓词会导致 副作用 到系统。例如,在 Prolog 中,这样的语句:

:- dynamic pred1, pred2.
:- writeln("I have just reached the end of the database file").

将在读取数据库(即您的序言“脚本”)时现场评估,并对系统产生副作用,但不会产生事实或关系进入知识库。在 Prolog 中,这种旨在现场评估并对运行时环境造成副作用的“无头”语句通常称为指令


Goal 子句和 Query 之间有什么关系?它们是一样的吗?

嗯,不。他们是相关的。具体来说,通过尝试证明目标无法得到满足来执行查询(在后台),即我们首先假设它是错误的(或者等效地,目标子句 em> 是真的)。然后,Prolog 遍历数据库,并尝试匹配文字,或尝试替换,就像它试图满足目标以推断明确子句的头部一样。如果我们遇到满足此目标的替换,那么在查询的上下文中,这会导致矛盾。因此,查询报告在这些替换下对目标的否定导致矛盾的术语。换句话说,这些替换是满足目标的替换。

编辑:(寻址 cmets)。

来自wikipedia:

Prolog 程序的执行由用户发布单个目标(称为查询)启动。从逻辑上讲,Prolog 引擎试图找到否定查询的解析反驳。 Prolog 使用的解析方法称为SLD resolution。如果否定的查询可以被驳斥,那么该查询,具有适当的变量绑定,是程序的逻辑结果。在这种情况下,所有生成的变量绑定都会报告给用户,并且查询成功

这是一个如何在后台实现查询的示例。假设您拥有以下知识库:

a.        % premise 1
b :- a.   % premise 2
% ... plus many other facts and relationships not involving a or b

prolog语句b :- a本质上对应逻辑语句a -&gt; b,相当于逻辑语句¬a v b。所以我们得到¬a v ba 作为前提。

现在假设您提出以下查询:

?- b.

这相当于说“嘿,Prolog,b is true 的声明是真是假?”

仅仅开始随机评估语句以查看它们是否碰巧产生b is true 作为结果是非常低效的。因此,相反,为了证明(在数学意义上)b is true,Prolog 的理由如下:“我将首先假设 b 实际上是错误的,然后开始插入它in, 在相关前提中。如果这个假设迫使我对我认为正确的任何前提进行证伪,那么这证明了这个假设实际上并不成立,因此 b 被证明是真的。”

以编程方式,这可能是这样的:

第 1 步:假设 ¬b 第 2 步:找到所有涉及文字 b 的前提并对其进行测试 步骤 3:b 参与前提¬a v b。这需要评估为真,因为这是一个前提。由于假定 b 为假,因此要使此前提评估为真,a 必须为假。 步骤 4:a 为真(前提 1)。这与第 3 步相矛盾。

因此假设¬b 导致矛盾,因此是错误的。这证明了b is true的说法。

这个例子只涉及文字。当涉及带有变量的谓词时,可能会有一些变量替换,其中“¬b”以类似的方式导致矛盾。因此,我们得出结论“b 被证明对于以下替换为真”,然后 Prolog 将报告 b 被证明为真的相关替换。

【讨论】:

谢谢:) 我想你已经完美地回答了我的问题。但是关于查询的最后一部分对我来说不是很清楚。为什么通过试图证明无法满足目标来执行查询?你能给我一些进一步的解释(或者一个例子)吗? 没有原因。这就是数学引擎如何“在幕后”进行的。它本可以以其他方式接近它,但大概这是一种更有效的实现方式。但在实践中,你什么都看不到;你所看到的只是你把一个目标作为一个查询词,你得到了有效的替换作为答案。 也阅读opening sentence in the wikipedia entry for Prolog :) (编辑:或那里链接的文章详细解释,如果你觉得勇敢的话!en.wikipedia.org/wiki/Prolog_syntax_and_semantics) 我不会称这种减少广告荒谬。整个事情依赖于 a -> b == ¬a v b 的等价性。我会试着举一个例子,虽然我敢肯定我会让你感到困惑,而不是澄清事情,哈哈。不过老实说,这并不重要。如果您有兴趣,请阅读en.wikipedia.org/wiki/Prolog_syntax_and_semantics#Evaluation 和en.wikipedia.org/wiki/SLD_resolution,但这只是prolog 如何将查询实现为“解析反驳”的一个例子。这里唯一重要的信息是术语“目标”和“查询”不是同义词。 嗯,对我来说,reductio ad absurdum 表明一个论点导致一个荒谬的绝对。一个荒谬的绝对被用作反对产生它的假设的论据,但不一定是那种在数学意义上符合明确矛盾的陈述。矛盾证明在数学意义上更多地与形式逻辑相关,而荒谬的绝对与更多的会话上下文相关,并且很可能只是非常主观意义上的“荒谬”或“绝对”。

以上是关于为啥我们将没有一个是肯定的文字的析取称为目标从句?的主要内容,如果未能解决你的问题,请参考以下文章

人工智能之归结反演法

定语从句语法讲解

在 Coq 假设中拆分析取 (\/)

为啥析取赋值运算符 |= 不适用于布尔向量?

人工智能导论——谓词公式化为子句集详细步骤

英语四级从句讲解