将以下公式转换为Skolem形式的号角公式:
∀w¬∀x∃z(H(w)的∧(¬G(X,X)∨¬H(Z)))
它是从德语翻译成英语,如何用喇叭形式写,然后以skolem形式,我在互联网上找不到任何东西...... PLZ帮帮我
答案 0 :(得分:3)
答案 1 :(得分:3)
我将始终使用skolemization的可满足性保留版本,即那些被替换的那个,当移动到公式的头部时,它们将成为存在量词。
为了让生活更简单,让我们把对原子的否定推到一边。我们还可以看到w不会出现在¬G(x,x)∨¬H(z)中,并且x,z不会出现在H(w)中,从而允许我们将量词分布在内部。 / p>
然后我们得到公式∀wH(w)∨∃x∀z(G(x,x)∧H(z))。
我们skx并删除∀w,∀z并获得:
H(w)∨(G(c,c)∧H(z))
CNF转型后,我们有:(¬H(w)∨G(c,c))∧(¬H(w)∨H(z))
这两个条款都只有一个正面的字面值,所以它们是喇叭条款。转换为Prolog语法我们得到:
g(c,c) :- h(W).
h(Z) :- h(W).
我们必须在否定之前否定,导致:
∃wH(w)∧∀x∃z(¬G(x,x)∨¬H(z))
H(c)∧(¬G(x,x)∨¬H(f(x)))
可以将其解释为事实h(c)
和查询?- g(X,X), h(f(X)).
说实话,两种变体都没有多大意义 - 第一种不会因任何输入而终止,而在第二种版本中,查询将失败,因为g/2
未定义。
答案 2 :(得分:0)
喇叭条款包含各种目标,所有目标都必须满足才能使整个条款成立。
∀w¬∀x∃z(H(w)∧(¬G(x,x)∨¬H(z)))
首先,为了清晰起见,您希望将整个语句翻译为人类语言。 ¬表示NOT,∧表示AND,∨表示OR。 ()用于分组目标。
∀w¬∀x∃z
对于所有w,所有NOT x,至少为1 Z.如果w为真,则x必须为false且必须至少为1 z。
H(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仅为真。
在Prolog你会写这个
factCheck(W,X,Z) :- h(W), not(g(X,X);not(checkZ(Z)).
其中Z是一个至少包含1个条目的列表。如果列表Z中的任何元素为真,则失败。
%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).