【发布时间】:2013-08-21 16:53:37
【问题描述】:
我的最终目标是从文件中将一组命题公式加载到 Prolog 中,以推断出一些事实。假设我有命题公式:
p implies not(q).
在 Prolog 中这将是:
not(q) :- p
Prolog 似乎不喜欢规则头部的not 运算符。我收到以下错误:
'$record_clause'/2: No permission to redefine built-in predicate `not/1'
Use :- redefine_system_predicate(+Head) if redefinition is intended
我知道重写p implies q 的一般公式的两种方法。首先,利用对立式在逻辑上等价的事实。
p implies q iff not(q) implies not(p)
其次,利用p implies q在逻辑上等价于not(p) or q这一事实(真值表相同)。
第一种方法导致我当前的问题。第二种方法只是合取或析取。你不能在 Prolog 中只写连词和析取词,因为它们不是事实或规则。
- 解决我的问题的最佳方法是什么,以便我可以表达
p implies not(q)? - 是否可以在 Prolog 中编写所有命题公式?
编辑:现在我希望将我的结果与其他命题公式联系起来。假设我有以下规则:
something :- formula(P, Q).
这是如何连接的?如果我在解释器中输入formula(false, true)(计算结果为真),这不会自动使something 为真。这就是我想要的。
【问题讨论】:
-
您所要做的就是选择一个不同的名称。
not/1是您的 Prolog 实现中内置的。
标签: prolog logic boolean-logic