prolog - 一阶逻辑 Prolog 匿名变量

标签 prolog first-order-logic prolog-anonymous-variable

下面的 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, _ )

假设它是一个姓氏,我们如何以一阶逻辑呈现它?

最佳答案

简单地使用规则:

"Give the child a name"

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

我们可以简单地将代码替换为:

grandparent(X,Z) :-
    parent(X,Y,<b>A</b>),
    parent(Y,Z,<b>B</b>).

现在逻辑上的“等效”将是:

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

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

关于prolog - 一阶逻辑 Prolog 匿名变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45378732/

相关文章:

Prolog:冗余导致涉及匿名变量的子句

prolog - 如何在归纳逻辑编程中生成反例?

c# - 需要为 C# 程序员学习 Prolog、Haskell

z3 - SMT 究竟针对哪些量词完成?

prolog - 谓词 'append/3' 如何与 Prolog 中的匿名变量一起使用?

security - 使用本地服务器为程序提供基于浏览器的 GUI 会带来哪些安全风险?

prolog - 了解 Prolog 中的列表和递归

rdf - 我们可以将 OWL 或 RDF 文件转换为一阶逻辑 (FOL) 吗?

logic - 如何在 Coq 中为蕴涵建模引入规则?