Backward Chaining算法如何在一阶逻辑中工作?

时间:2012-10-12 15:14:07

标签: algorithm logic

enter image description here

我可以获得for each循环的解释,因为它对我没有多大意义。特别是,STANDARDIZE-APART()和第二个最后一行做什么?

FOL_BC_ASK(KB,[p1...,pn|REST(goals)],COMPOSE(@',@)) U ans

1 个答案:

答案 0 :(得分:7)

r是知识库中的FOL句子。

除此之外,FOL句子可能包含量词和变量。

对于任何FOL句子,都有一种简化形式,有各种形式,如CNF(Conjunctive Normal Form)(Horn子句相似),这个算法可以操作。 CNF样式的简化仅限于特定的,有限的一组操作符,并且通常导致与原始操作符相比的扩展语句(有时显着更长)。尽管允许变量,但CNF不使用量词。

量词是运营商" for-all" (普遍的),"存在" (存在)。每个量词都采用变量(或变量列表)和单个(子)语句,在该语句中量化引入的变量(在列表中)。这些变量被认为是绑定的,虽然只是针对一个子语句的范围 (在量化表达式中)。 因此,量词隐含地引入了新的范围(对于其变量)

CNF不允许显式表达量词,也不提供变量的多个或单独范围!因此,不仅必须消除量词,还必须消除变量的范围(或折叠到单个范围)。 (范围很容易消除,因此首先要做到这一点。)

当单个语句包含多个量词时,在FOL中完全可以接受相同的变量名称在具有不相交范围的量词中重用。因此,以下单个(尽管复合)语句在FOL中是可接受的:

(there-exists(x) (Father(x,Joe))) AND (there-exists(x) (Mother(x,Joe)))

其中有一些x是Joe的父亲,而且还有一些x(不同的x)是Joe的母亲。

在上面的语句中,变量x被引入两次,尽管它的两个不同用途实际上是不相关的!但是,因为x被使用了两次,所以当我们读取和解释或操作和转换这个语句时,我们必须保持知道两个独立的范围(否则我们的转换有时会无法等效)。对于任何FOL语句,这都是正确的,这意味着我们需要了解范围,以便解释和操纵一般FOL语句。

以下语句从逻辑角度来看是等效的,但不使用x两次:

(there-exists(x) (Father(x,Joe))) AND (there-exists(y) (Mother(y,Joe)))

如果我们保证我们的(转换的)语句没有重叠变量(即在不相交的范围内没有两个相同的变量名使用),我们不再需要考虑两个使用量化引入的两个独立范围。我们可以有效地认为这些陈述的变量只有一个范围。这是STANDARDIZE-APART的独立性的本质,通过确保跨范围的变量不重叠(通过赋予它们每个唯一的名称),我们不再需要在单个语句中单独考虑多个范围(可能有多个量词)。

(如果您将两个过程或方法或语句块合并为一个,那么您在Java中会做同样的事情:您要确保所选变量名称在它们之间是唯一的,因此它们不会#39; t冲突。)

STANDARIZE-APART正在转换为CNF,这需要将多个范围合并为一个,并且消除量词(以及替换某些运算符,例如暗示和等同于"" ;,"或"," not")。

存在量词被消除,有利于skolem函数如下:在第二(和更高)顺序逻辑中,我们可以量化函数(例如,存在(f),使得f()......),但是,在第一订单逻辑,我们无法量化功能。虽然我们无法量化FOL中的函数,但我们仍然可以使用函数。 在FOL中,简单地假定函数存在。 (CNF和喇叭子句形式也尊重函数的假设存在。)Skolemization是存在量化的替代,其中存在量化变量(在子语句中出现的任何地方)被新构造和适当参数化的函数替代(为每个这样的存在量词替换构成一个新函数,所提供的参数与其他封闭量词的上下文有关。简单地假设这个新引入的函数存在而不需要存在量词。消除了存在量化变量的使用(支持新函数),我们现在可以省略存在量化算子本身并保留修改后的子语句。

通用量词被提升到语句的最外层(范围),可以简单地被消除(1)因为范围已经崩溃,(2)因为不再存在任何存在量词(因为已经被消除了(3)因为在各种CNF /喇叭形式中,所有变量都被假定为具有通用量化。


统一是一种组合技术,在这种技术中,如果我们将关于相同关系的两条(另外是单独的)信息组合起来,我们就会考虑我们所知道的信息。信息片段采用变量和常量参数的形式来表达关系。与标准化不同,统一并不总是成功,也就是说,它并不总能揭示更多信息。


最后一行是后向链接搜索的下一级别的后向链接的递归调用,其中已经被寻址的一个目标(例如CNF语句)被替换为所得到的子目标。通过解决,我的意思是统一成功,统一成功意味着我们至少名义上提升了我们搜索引擎的状态,这一进步值得进一步探索(另一个层次)。