如何用skolem形式写它?(Prolog)

时间:2018-02-06 01:52:00

标签: prolog

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

∀w¬∀x∃z(H(w)的∧(¬G(X,X)∨¬H(Z)))

它是从德语翻译成英语,如何用喇叭形式写,然后以skolem形式,我在互联网上找不到任何东西...... PLZ帮帮我

3 个答案:

答案 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))

在删除∃w和∃z,删除∀x和CNF转换后,我们获得:

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).