【发布时间】:2016-09-24 17:49:53
【问题描述】:
我只是在学习prolog,有件事我无法理解。
假设我有以下程序
value(v).
a(X) :- not(value(X)).
所以a(v). 给了我错误,因为value(v) 可以被证明是正确的。
a(w) 给了我真实的感觉,因为没有事实 value(w),因此,即使尝试,也无法证明它是正确的。
在我的理解中,请求a(X). 应该给我第一个使value(X) 无法证明的可能值。应该有无数种可能性,因为只有value(v) 是正确的。
但为什么 Prolog 一直回复 false?
【问题讨论】:
-
看你怎么看falsification,什么是假的?你如何证明某事是假的?它的一种观点是所有不可证明的都是假的,这是一种你想象你生活在一个一切都是真的 是可证明的(这当然是有争议的)。在序言中,
\+运算符使用否定作为失败语义,这就是我在上面试图描述的。希望能提供一些线索。 -
是的,如果我们将 false 定义为不可证明,那么 Prolog 是否可以通过提供无法证明正确的示例来实现目标?
-
但我想问题是Prolog总是希望让事情变得真实,在这种情况下,我们基本上会反转引擎?
标签: prolog unification prolog-dif