如何用skolem格式编写?(Prolog)

如何用skolem格式编写?(Prolog),prolog,Prolog,将以下公式转换为Skolem形式的horn公式: ∀w∀x∃z(H(w)∧(-G(x,x)∨-H(z))) 它是从德语翻译成英语的,如何用horn格式和skolem格式写,我在互联网上找不到任何东西…请帮我这个页面有用吗 horn条款由各种目标组成,所有这些目标都必须满足,才能使整个条款成为现实 ∀w∀x∃z(H(w)∧(-G(x,x)∨-H(z)) 首先,为了清晰起见,您需要将整个语句翻译成人类语言。-意味着不,∧ 手段和∨ 意味着或。()用于对目标进行分组 ∀w∀x∃z 对于所有的w,都不是

将以下公式转换为Skolem形式的horn公式:

∀w∀x∃z(H(w)∧(-G(x,x)∨-H(z)))

它是从德语翻译成英语的,如何用horn格式和skolem格式写,我在互联网上找不到任何东西…请帮我这个页面有用吗


horn条款由各种目标组成,所有这些目标都必须满足,才能使整个条款成为现实

∀w∀x∃z(H(w)∧(-G(x,x)∨-H(z))

首先,为了清晰起见,您需要将整个语句翻译成人类语言。-意味着不,∧ 手段和∨ 意味着或。()用于对目标进行分组

∀w∀x∃z

对于所有的w,都不是x,至少有1z。如果w为真,x必须为假,并且至少有1z

H(w)

w是H吗?在你的知识库中,一定有一个事实表明H(w)是正确的

-G(x,x)

是否存在一个事实G(x,x)?如果是,则返回false

H(z)

是否存在H(z)的事实?如果是,则返回false

z(H(w)∧(-G(x,x)∨-H(z))

这意味着,只有当H(w)为真且G(x,x)或H(z)为假时,z才为真

在序言中,你可以这样写
factCheck(W,X,Z):-h(W),not(g(X,X);not(checkZ(Z))。
其中Z是一个列表,其中至少有一个条目。如果列表Z中的任何元素为true,则失败

%is the list empty?
checkZ([])
%is h true for the first element of the list?
checkZ([Head|Tail]) :- h(Head), !.
%remove the first element of the list
checkZ([Head|Tail]) :- checkZ(Tail).

我将始终使用保留满足性的skolemization版本,即那些被替换的版本,当移动到公式的头部时,这些版本将成为存在量词

为了让生活简单一点,让我们把否定推到原子上。我们还可以看到w不会出现在G(x,x)中∨H(z)和x,z不出现在H(w)中,允许我们将量词稍微分布在内部

然后我们得到了公式∀w-H(w)∨ ∃x∀z(G(x,x)∧ H(z))

  • 如果我们想反驳这个公式:
我们要把它弄脏∃x和删除∀W∀z并获得:

-H(w)∨ (G(c,c)∧ H(z))

CNF改造后,我们有:

(-H(w)∨ G(c,c))∧ (-H(w)∨ H(z))

这两个子句正好有一个正文本,因此它们是horn子句。翻译成Prolog语法后,我们得到:

g(c,c) :- h(W).
h(Z) :- h(W).
  • 如果我们想证明公式:
我们必须先否定,然后再否定,从而导致:

∃w H(w)∧ ∀x∃z(G(x,x)∨ (H(z))

经斯科利米化后∃w和∃z、 删除∀x和CNF变换,我们得到:

H(c)∧ (-G(x,x)∨ -H(f(x)))

这可以解释为一个事实
h(c)
和一个查询
?-g(X,X),h(f(X))。


老实说,这两种变体都没有多大意义-第一种变体不会因任何输入而终止,在第二种版本中,查询将失败,因为未定义
g/2

一些Wiki指针:。它们也都有德语版本,尽管质量不同。另外:是否要反驳或证明此公式?在第一种情况下,您直接应用CNF转换和skolemization。在第二种情况下,您需要首先否定公式。您忽略了量词的不同性质(∀,∃) 在您的解释中。为了保持可满足性,有必要为存在量词引入skolem术语。为了保持有效性,有必要为通用量词引入skolem术语。Prolog只接受skolemized Horn子句作为输入,这就是为什么没有编写量化公式的内置方法。甚至否定n运算符
\+
不是经典的否定式。当您将公式转换为Horn子句时,许多复杂的问题都可以解决,但这不是自动完成的。我不想在几天过去之前就给出答案,希望OP能自己解决,但如果您感兴趣,我现在就添加了它ed.谢谢,我有点纠结于此。把NOT语句推到相反的位置很容易,但这到底是如何证明集合的存在的,这让我很困惑。我已经长大了!我也会尝试更新我的答案,只是我的大脑还没有点击。我已经盯着这个主题好几天了。所以你给我定一个规则存在性声明左边的每一项?我仍然不知道∃ 当“存在”变成∀. 我想我需要读更多的书∀存在x或w的z?也许我应该添加实际规则:∀xF(x)相当于∃如果F(x)对所有x都成立,那么在F(t)不成立的地方,必须(至少)有一项t。在古典逻辑中,这意味着F(t)是真的。它对——∃xF(x)和∀x-F(x)。