如何用skolem格式编写?(Prolog)
将以下公式转换为Skolem形式的horn公式: ∀w∀x∃z(H(w)∧(-G(x,x)∨-H(z))) 它是从德语翻译成英语的,如何用horn格式和skolem格式写,我在互联网上找不到任何东西…请帮我这个页面有用吗如何用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,都不是
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))
- 如果我们想反驳这个公式:
g(c,c) :- h(W).
h(Z) :- h(W).
- 如果我们想证明公式:
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)。