让我们根据最小逻辑而不是根据解析定理证明来解释后向链接和前向链接。正常的后向链接Prolog规则可以看作是最小逻辑左蕴涵引入规则的应用。所以基本上当我们有一个目标 P 和一个规则 A->P 时,组合推理规则说我们可以用目标 A 替换目标 P:
-------- (Id)
P |- P G, A -> P |- A
--------------------------------- (Left ->)
G, A -> P |- P
现在可以使用相同的规则对正向链接应用程序进行建模。这次我们没有目标 P,而是在前提中实现了条件 A。当存在规则 A -> P 时,该规则也允许我们实现头部 P。组合推理规则如下:
------- (Id)
A |- A G, A, A -> P, P |- B
--------------------------------------- (Left ->)
G, A, A -> P |- B
我们这个小程序的想法是完全计算正向链接过程的固定点 F(M) = M。我们所做的是计算迭代 M0、M1、M2 等。仅当过程以有限结果终止时才有效。从演绎数据库中,我们采用了仅计算 Mn+1 和 Mn 之间的增量的想法。可以找到一个 G,使得 F(Mn)\Mn = G(Mn\Mn-1,Mn-1) 相对较少的努力。
G 的当前实现可能会偶然发现循环数据,因为目前还没有消除重复。在还允许删除事实的前向链接器中,可以使用特殊的前向规则来消除重复项。成熟的前向链接系统无论如何都应该允许删除事实,然后它们甚至可以用于实现约束求解系统。
但是,让我们暂时保留简单的想法和相应的简单代码。
F函数中的G函数(delta/2)(原始规则)
http://www.xlog.ch/jekejeke/forward/delta.p
具有前向链接的玩具专家系统
http://www.xlog.ch/jekejeke/forward/expert.p