在Prolog中使用逻辑仿函数

时间:2011-11-25 18:24:39

标签: prolog logic semantics ontology

我想拥有逻辑连接词,例如

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以这种方式。

2 个答案:

答案 0 :(得分:2)

这里没有一种独特的最佳方式。这取决于你的特定用途。

您的问题基本上缩减为:如何在您的设置中表示变量。从根本上来说?这是一个(Prolog)变量自由表示。或直接通过Prolog变量。

我宁愿先试一下地面代表。也许用Nr整数来尝试v(Nr)。相对频繁的'$VAR'(Nr)也可由writeq/1识别。但我会在开头坚持使用v/1

答案 1 :(得分:1)

查看Thea project。它开发了一个用于操作OWL2本体的Prolog库。也许他们已经实现了否定正常形式转换。