我的最终目标是将一组命题公式从文件加载到 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
当且当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
真。这就是我想要的。