一阶逻辑Prolog匿名变量

时间:2017-07-28 16:53:05

标签: prolog first-order-logic

下面的Prolog规则:

grandparent(X,Z) :- parent(X,Y) , parent(Y,Z)

在第一顺序逻辑将是:

∀x ∀y ∀z ((P (x, y) ∧ P (y, z)) → G(x, z))

理论上,如果我们的Prolog规则中有一个匿名变量,例如:

grandparent(X,Z) :- parent(X,Y, _ ) , parent(Y,Z, _ )

让我们说这是一个姓氏,我们怎样才能将它呈现在一阶逻辑中?

1 个答案:

答案 0 :(得分:3)

只需使用规则:

  

“给孩子起个名字”

请注意,下划线不是单个变量。 Prolog中的两个下划线彼此无关。

我们可以简单地用以下代码替换代码:

grandparent(X,Z) :-
    parent(X,Y,A),
    parent(Y,Z,B).

现在逻辑“等效”将是:

∀x∀y∀z∀a∀b:((P(x,y,a)∧P(y,z,b))→G(x,z))

但是请注意,这两个不等同:从理论上讲(可能不在这里),第一个parent/3调用,可能会产生副作用,地面术语进一步等等。 Prolog的子集映射到这样的逻辑结构。