一阶逻辑Prolog匿名变量

一阶逻辑Prolog匿名变量,prolog,first-order-logic,prolog-anonymous-variable,Prolog,First Order Logic,Prolog Anonymous Variable,序言规则如下: 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, _ ) 假设它是一个姓氏,我们如何以一阶逻辑表示它?只需使用以下规则: “给孩子起个名字” 请注意,下划线不是单个变量。Pro

序言规则如下:

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, _ )
假设它是一个姓氏,我们如何以一阶逻辑表示它?

只需使用以下规则:

“给孩子起个名字”

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

我们只需将代码替换为:

grandparent(X,Z) :-
    parent(X,Y,A),
    parent(Y,Z,B).
祖父母(X,Z):-
父对象(X,Y,A),
父项(Y、Z、B)。
现在逻辑上的“等价物”是:

∀x∀Y∀Z∀A.∀(P(x,y,a)∧ P(y,z,b))→ G(x,z))

但是请注意,这两个调用并不等价:从理论上讲(这里可能不是这样),第一个
parent/3
调用可能会产生副作用、基础项等。只有Prolog的一个子集映射到这样的逻辑结构