将事实转换为一阶逻辑。
将FOL语句转换为CNF
否定需要证明的陈述(矛盾证明)
绘制分辨率图(统一)。
约翰喜欢各种食物。
苹果和蔬菜是食物
任何人吃饭而不被杀死都是食物。
Anil吃着花生,还活着
Harry吃掉了Anil吃的一切。
通过决议证明:
约翰喜欢花生。
消除所有含义(→)并重写 ∀x ¬ food(x) V likes(John, x) food(Apple) Λ food(vegetables) ∀x ∀y ¬ [eats(x, y) Λ ¬ killed(x)] V food(y) eats (Anil, Peanuts) Λ alive(Anil) ∀x ¬ eats(Anil, x) V eats(Harry, x) ∀x¬ [¬ killed(x) ] V alive(x) ∀x ¬ alive(x) V ¬ killed(x) likes(John, Peanuts).
向内移动取反(¬)并重写 ∀x ¬ food(x) V likes(John, x) food(Apple) Λ food(vegetables) ∀x ∀y ¬ eats(x, y) V killed(x) V food(y) eats (Anil, Peanuts) Λ alive(Anil) ∀x ¬ eats(Anil, x) V eats(Harry, x) ∀x ¬killed(x) ] V alive(x) ∀x ¬ alive(x) V ¬ killed(x) likes(John, Peanuts).
重命名变量或标准化变量 ∀x ¬ food(x) V likes(John, x) food(Apple) Λ food(vegetables) ∀y ∀z ¬ eats(y, z) V killed(y) V food(z) eats (Anil, Peanuts) Λ alive(Anil) ∀w¬ eats(Anil, w) V eats(Harry, w) ∀g ¬killed(g) ] V alive(g) ∀k ¬ alive(k) V ¬ killed(k) likes(John, Peanuts).
通过消除消除存在的实例化量词。
在这一步中,我们将消除存在量词∃,该过程称为 Skolemization 。但是在此示例问题中,由于没有存在量词,因此所有语句在此步骤中将保持不变。
丢弃通用量词。
在这一步中,我们将删除所有通用量词,因为并非所有语句都被隐式量化,因此我们不需要它。 ¬ food(x) V likes(John, x) food(Apple) food(vegetables) ¬ eats(y, z) V killed(y) V food(z) eats (Anil, Peanuts) alive(Anil) ¬ eats(Anil, w) V eats(Harry, w) killed(g) V alive(g) ¬ alive(k) V ¬ killed(k) likes(John, Peanuts).
将相合词∧分布在不相交对象¬上。
此步骤不会对此问题做出任何更改。
在分辨率图的第一步中,通过替换来解决¬likes(John,Peanuts)和 likes(John,x) > {Peanuts/x} ,然后剩下¬food(Peanuts) 在分辨率图的第二步中,通过替换{Peanuts / z} 来解决 ¬¬ food(Peanuts)和 food(z)/z} ,并剩下¬eats(y, Peanuts) V killed(y) 。 在分辨率图的第三步中,¬eats(y,Peanuts)和eats(Anil,Peanuts)通过替换{Anil / y}进行解析,然后剩下Killed(Anil)。 在分辨率图表的第四步中,Killed(Anil) 和¬kill(k)通过替换{Anil / k}得到解析,剩下¬alive(Anil)。 在分辨率图的最后一步,alive(Anil)和alive(Anil)得到解析。