Prolog Herbrand宇宙与最小Herbrand模型

Prolog Herbrand宇宙与最小Herbrand模型,prolog,logic-programming,Prolog,Logic Programming,我阅读了中提出的问题和给出的答案,但我有一个稍微不同的问题,更像是确认,希望我的困惑会得到澄清 设p是一个程序,我们有以下事实和规则: q(a, g(b)). q(b, g(b)). q(X, g(X)) :- q(X, g(g(g(X)))). 从上面的程序中,赫伯兰宇宙 Up = {a, b, g(a), g(b), q(a, g(a)), q(a, g(b)), q(b, g(a)), q(b, g(b)), g(g(a)), g(g(b))...e.t.c} 赫伯兰基地: Bp =

我阅读了中提出的问题和给出的答案,但我有一个稍微不同的问题,更像是确认,希望我的困惑会得到澄清

设p是一个程序,我们有以下事实和规则:

q(a, g(b)).
q(b, g(b)).
q(X, g(X)) :- q(X, g(g(g(X)))).
从上面的程序中,赫伯兰宇宙

Up = {a, b, g(a), g(b), q(a, g(a)), q(a, g(b)), q(b, g(a)), q(b, g(b)), g(g(a)), g(g(b))...e.t.c}
赫伯兰基地:

Bp = {q(s, t) | s, t E Up}
  • 现在来问我的问题(请原谅我的无知),我把q(a,g(a))作为一个元素包含在我的赫伯兰宇宙中,但事实上,它表示q(a,g(b))。这是否意味着q(a,g(a))不存在
  • 此外,由于Herbrand模型是Herbrand基的子集,如何通过归纳确定最小Herbrand模型

注意:我对此做了很多研究,有些部分我很清楚,但我仍然有这种怀疑,这就是为什么我想征求社区的意见。谢谢。

从事实
q(a,g(b))
你无法断定
q(a,g(a))
是否在模型中。您必须首先生成模型

为了确定模型,从事实
{q(a,g(b)),q(b,g(b))}
开始,现在尝试应用您的规则来扩展它。然而,在您的情况下,没有办法将规则的右侧与上述事实相匹配。因此,你已经完成了

现在想象一下规则

这个规则可以用来扩展我们的集合。事实上

q(a,g(g(b))) :- q(b,g(b)).
使用:如果存在
q(b,g(b))
,则总结
q(a,g(b))
。注意,我们在这里使用从右到左的规则。所以我们得到

{q(a,g(b)), q(b,g(b)), q(a,g(g(b)))}
从而达到一个固定点

现在再举一个你建议的规则的例子

q(X, g(g(g(X)))) :- q(X, g(X)).
它允许(我不再显示实例化的规则)在一个步骤中生成:

{q(a,g(b)), q(b,g(b)), q(a,g(g(g(b)))), q(b, g(g(g(b))))}
但这并不是终点,因为这一规则同样可以应用于生产更多的产品!事实上,你现在有了一个无限的模型

{g(a,gn+1(b)), g(b, gn+1(b))} {g(a,gn+1(b)),g(b,gn+1(b))}

当您试图理解Prolog中的递归规则时,这种从右到左的阅读通常非常有用。自上而下的阅读(从左到右)通常非常困难,特别是因为你必须考虑回溯和总体统一。

关于你的问题:

“此外,由于Herbrand模型是Herbrand基的子集,如何通过归纳法确定最小Herbrand模型?”

如果您有一组horn子句,即确定程序,那么您可以定义 程序操作员:

T_P(M) := { H S | S is ground substitution, (H :- B) in P and B S in M }
最小的模型是:

inf(P) := intersect { M | M |= P }
请注意,并非所有确定程序的模型都是 程序操作员。例如,完整的herbrand模型始终是 程序P,表明确定的程序总是一致的,但是 它不一定是一个固定点

另一方面,程序运算符的每个不动点都是 明确的程序。也就是说,如果T_P(M)=M,那么可以得出结论 M |=P。因此,经过进一步的数学推理(*)后,我们发现 最小不动点也是最小模型:

lfp(T_P) = inf(P)
但我们需要进一步考虑,以便我们可以说,我们可以确定 通过一种计算得到的最小模型。也就是说,我们很容易观察到 程序运算符是连续的,即保留链的无限并集,因为 horn子句的主体中没有所有的量词:

union_i T_P(M_i) = T_P(union_i M_i)
所以在进一步的数学推理之后,我们发现我们可以 通过迭代计算最小不动点,可用于简单 就职最小模型的每个单元都有一个简单的有限元推导 深度:

再见

(*) 很可能你会发现关于精确数学推理的更多线索 需要在这本书中,但不幸的是,我不记得哪些部分 相关信息:
逻辑编程基础,约翰·怀利·劳埃德,1984

谢谢你的解释,我想我明白了。例如q(X,g(g(g(X))):-q(X,g(X)),规则的变化是什么。?我的赫伯兰宇宙也是正确的吗?@Plaix:赫伯兰宇宙就是所有可能的组合。
union_i T_P(M_i) = T_P(union_i M_i)
union_i T_P^i({}) = lpf(T_P)