我想拥有逻辑连接词,例如
not(X), conj(X, Y), some(Y, K).
我希望能够迭代它们。
因此,例如我希望能够将(某些(Y,K))转换为全部(Y,而不是(K))。
我不希望它们具有任何特定含义,我只想以这种方式使用逻辑公式。
最好的方法是什么?
以下是我的代码中的实际行:
nnf(not(all(X, Y)) ,some(Z, W)) :- nnf(X, Z), nnf(not(Y), W).
所以,如果我给它not(all(a,b))
我想要找回一些(a,而不是(b)),但是atm我不知道如何让Prolog来对待not/1
和{{1以这种方式。
答案 0 :(得分:2)
这里没有一种独特的最佳方式。这取决于你的特定用途。
您的问题基本上缩减为:如何在您的设置中表示变量。从根本上来说?这是一个(Prolog)变量自由表示。或直接通过Prolog变量。
我宁愿先试一下地面代表。也许用Nr整数来尝试v(Nr)
。相对频繁的'$VAR'(Nr)
也可由writeq/1
识别。但我会在开头坚持使用v/1
。
答案 1 :(得分:1)
查看Thea project。它开发了一个用于操作OWL2本体的Prolog库。也许他们已经实现了否定正常形式转换。