将句子转换为第一顺序逻辑

时间:2011-03-12 13:05:29

标签: nlp first-order-logic

在一阶逻辑中,我知道规则。但是,每当我将一些句子转换为FOL时,我会收到错误,我会阅读很多书籍和教程,你有任何可以帮助我的技巧,

我犯错误的一些例子

有些孩子会吃任何食物

C(x) means “x is a child.”
F(x) means “x is food.”
Eat(x,y) x eats y
I would have written like this:

(∃x)(∀y) C(x) ∧ Eat(x,y)

edit:  (∃x)(∀y) C(x) ∧  F(y) ∧ Eat(x,y)

But the book write it like this

(∃x)(C(x) ∧ (∀y)(F(y)→Eat(x,y)))

编辑No2:    我正在制作的第二类错误:    海龟比兔子长。

i'm writing it like this: ∀x,y Turtle(x)  ∧  Rabbit(y)  ∧ Outlast(x,y)

 but according to the book  ∀x,y Turtle(x)  ∧  Rabbit(y)  --> Outlast(x,y)

当然,我同意这本书,但是我的版本有任何问题 !!

3 个答案:

答案 0 :(得分:3)

  

x y [C( x )∧F( y )∧吃( x y )]

它遵循∀ y F( y ),即一切都是食物。 (“存在一个孩子 x ,对于所有 y y 是食物”并且还有其他一些命题。)它也遵循孩子吃自己:如果我们用任意常数 c 表示孩子并填写,我们得到

  

y [C( c )∧F( y )∧吃( c ÿ)]

由于 y 是普遍量化的,我们可以通过将其替换为 c 来实例化

  

C( c )∧F( c )∧吃( c c

这是一种不受欢迎的事态。

从你的第二个例子

  

x y [海龟( x )∧兔子( y )∧Nowststs( x y )]

紧随其后

  

x 海龟( x )∧∀ y 兔子( y )∧∀ x y 持续时间( x y

即,一切都是乌龟,一切都是兔子,一切都比一切都好,包括它自己。

本书中的版本使用→表示对于每个对象 y 如果它是食物,那么它会被<吃掉EM> X 。你需要一个条件来表达“所有X都是Y”或“每个X都是Y”形式的句子。

答案 1 :(得分:2)

每当你在英语句子中有每个(或任何 no )时,相应的FOL句子应该同时具有通用量词和它的含义。例如。名词短语每个人的翻译模板将是:

∀ x (man(x) ⇒ ...)

如果你的英语句子不包含任何决定因素,那么重新制定它,以便其中的每个名词都带有一个限定词。这样,到FOL的映射变得清晰。例如。模糊/模糊的句子

Turtles outlast Rabbits.

可以用几种语义不同的方式重新制定:

  • 每只龟都比每只兔子都快。
  • 有些海龟比每只兔子都要长。
  • 有些乌龟比一些兔子长。
  • 大多数海龟比大多数兔子都要长。
  • ...

顺便说一下,有一个online tool APE可以将英语句子转换成FOL,前提是你先重新编写句子,使它们落入这个工具所支持的英语片段中。但请注意,此工具返回单个FOL读数,即它不会枚举输入可能包含的所有歧义。

答案 2 :(得分:1)

您没有先检查y是否是食物。考虑到你的陈述,让a成为孩子,即。 C(a)是真的。然后(∃x)(∀y) C(x) ∧ Eat(x,y)隐含(∃x) C(x) ∧ Eat(x,a)。换句话说,你说有些孩子会吃任何东西,而不仅仅是食物。