我试图找到一种方法将以下一阶逻辑表达式放入 Prolog:
(p(0) or p(1)) and not (p(0) and p(1))
这意味着它应该以下列方式响应查询:
?- p(0)
Yes.
?- p(1)
Yes.
?- p(0),p(1).
No.
我试图翻译逻辑表达式:
(p(0) or p(1)) and not (p(0) and p(1)) <=>
(not p(0) -> p(1)) and (p(0) -> not p(1)) <=>
p(0) <-> not p(1)
使用 Clarks 补全(这表明每个定义理论都可以通过给出 if-halves 放入一个逻辑程序中),我可以获得:
p(0) :- not p(1).
不幸的是,这个由此产生的理论只是合理的(它不会推导出错误的信息),而不是完整的(例如:p(1) 无法推导出)。这是克拉克定理的结果。
有谁知道是否有更好的解决方案?谢谢!