将英语陈述形成为一组一阶逻辑陈述

时间:2017-05-21 19:18:56

标签: prolog first-order-logic

我目前正在学习FOL并且有许多英语陈述,我正试图将其制定为FOL陈述。

我有英语陈述以及每次FOL尝试。我只是想知道是否有人可以让我知道我可能在哪里出错,谢谢。

英语声明

  1. 一个高个子男人可以达到很高的目标。

  2. 小个子可以达到低钩。

  3. 高钩是免费的。

  4. 如果有一个衣帽钩,一个男人会挂上外套,男人可以穿上那个衣帽钩。

  5. 保罗是个高个子男人。

  6. 约翰是个矮人。

  7. 谁能把衣服挂在什么钩子上?

  8. 第一顺序逻辑陈述ATTEMPTS

    1. manxman(X,tall) - > reach_hook(X,high_hook)。

    2. manxman(X,small) - > reach_hook(X,low_hook)。

    3. 自由(high_hook)。

    4. ∀x,y free(X)^ reach_hook(Y,X) - > hang_coat(Y,X)。

    5. 人(保罗,高)。

    6. man(john,简称)。

    7. ? - hang_coat(X,Y)。

1 个答案:

答案 0 :(得分:0)

当你说FOL时,我认为你的意思是Prolog。它们不是一回事。

一般性评论:Prolog变量是隐式普遍(全部)量化的,因此您不需要∀量词,这就是Prolog没有它的原因。存在量词写在X ^中,如

X^(man(X), tall(X))

但只能在谓词体中使用。如果你想说“有一个高个子男人”之类的话,你需要用一个原子代表他,如

tall(xyzzy001).
man(xyzzy001).

那么,你的例子。 #1& #2人和钩子显然是普遍量化的,但你使用一个原子作为钩子(或两个钩子)。 man/2reach_hook/1似乎也是临时的。所有男人都有一个属性吗?与货架,壁架,门把手相比,到达挂钩有什么特别之处......或许以下情况可能更好。

reach(X,Y) :- man(X), tall(X), hook(Y), high(Y).
reach(X,Y) :- man(X), small(X), hook(Y), low(Y).

(已更改为使其成为有效语法。)

在#3中你正在使用一个原子,但为了使它与前面的条款保持一致,我们可能会说

hook(xyzzy002).
high(xyzzy002).
free(xyzzy002).

示例#5和#6类似。在#4中,你似乎已经将钩子的规格简化为“外套钩子”,这可能并不重要,你的谓词可能更通用,比如

hang(X,Z,Y) :- man(X), hook(Y), coat(Z), reach(X,Y), free(Y).

(已更改为使其成为有效语法。)

假设这种形式化和填充数据库,问题#7可以表示为

?- hang(X,Z,Y), coat(Z), owns(X,Z).

owns/2也应该包含在#4中。