我目前正在学习FOL并且有许多英语陈述,我正试图将其制定为FOL陈述。
我有英语陈述以及每次FOL尝试。我只是想知道是否有人可以让我知道我可能在哪里出错,谢谢。
一个高个子男人可以达到很高的目标。
小个子可以达到低钩。
高钩是免费的。
如果有一个衣帽钩,一个男人会挂上外套,男人可以穿上那个衣帽钩。
保罗是个高个子男人。
约翰是个矮人。
谁能把衣服挂在什么钩子上?
manxman(X,tall) - > reach_hook(X,high_hook)。
manxman(X,small) - > reach_hook(X,low_hook)。
自由(high_hook)。
∀x,y free(X)^ reach_hook(Y,X) - > hang_coat(Y,X)。
人(保罗,高)。
man(john,简称)。
? - hang_coat(X,Y)。
答案 0 :(得分:0)
当你说FOL时,我认为你的意思是Prolog。它们不是一回事。
一般性评论:Prolog变量是隐式普遍(全部)量化的,因此您不需要∀量词,这就是Prolog没有它的原因。存在量词写在X ^中,如
X^(man(X), tall(X))
但只能在谓词体中使用。如果你想说“有一个高个子男人”之类的话,你需要用一个原子代表他,如
tall(xyzzy001).
man(xyzzy001).
那么,你的例子。 #1& #2人和钩子显然是普遍量化的,但你使用一个原子作为钩子(或两个钩子)。 man/2
和reach_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中。