【发布时间】:2014-03-17 01:30:47
【问题描述】:
这是声明:
除了企鹅和鸵鸟之外,所有鸟类都可以飞,或者除非它们 翅膀断了。
这是我的尝试:
∀x鸟(x)→飞(x)^((鸟(x,企鹅)^鸟(x, 鸵鸟))˅折断(翅膀)→¬飞(x))
我的尝试正确吗? 我们如何在谓词逻辑中呈现“除外”? 谢谢
【问题讨论】:
-
这应该在 math.stackexchange.com 上询问(由于某种原因它没有出现在 Migration 下)。
这是声明:
除了企鹅和鸵鸟之外,所有鸟类都可以飞,或者除非它们 翅膀断了。
这是我的尝试:
∀x鸟(x)→飞(x)^((鸟(x,企鹅)^鸟(x, 鸵鸟))˅折断(翅膀)→¬飞(x))
我的尝试正确吗? 我们如何在谓词逻辑中呈现“除外”? 谢谢
【问题讨论】:
关于理解“除外”...
当我们说“A 除外 B”时,通常是指 A 和 B 是互斥的。要么 A 是这种情况,要么 B 是这种情况,但不是两者兼而有之。
如果你从集合的角度思考,那么
All birds can fly except for penguins and ostriches or unless they have a broken wing
可以改写成
In the universe of birds, there are exactly two distinct sets -- one in which every member of the set can fly and the other in which you find penguins and ostriches and birds with broken wings.
(顺便提一下,英语中“and”和“or”这两个词在符号表达中经常需要调整的方式。)
Birds
+-----------+------------+
| | |
| Fly | Exceptions |
| | |
+-----------+------------+
在谓词逻辑中表示互斥最容易通过异或 (XOR) 处理。我们想说fly XOR exceptions。
在允许量词限制话语范围的系统中,我们可以这样写:
∀x∊birds (fly(x) XOR (penguin(x) v ostrich(x) v brokenWing(x)))
如果量词是无限的,那么:
∀x (bird(x) → (fly(x) XOR (penguin(x) v ostrich(x) v brokenWing(x))))
如果 XOR 不在允许的运算符集中,那么您可能必须使用等价:
p XOR q ≡ ((p v q) & -(p & q))
英文句子中还隐藏着一些其他含义,在上述建议中没有完全表达出来。
谓词逻辑中的句子允许有 没有鸟,而英文句子可能暗示有 至少一只鸟。
英文“A except B”通常表示有 至少有一些例外情况。不仅有至少一个 鸟,但至少有一只企鹅不会飞。可能 通过适当使用存在量词添加到谓词句中 量词。
几乎总是用英文写“A except B” 暗示A是最常见的情况,B是例外。在里面 在没有其他证据的情况下,我们假设 A. 在宇宙中 鸟类,大多数都可以飞,只有列出的例外不能飞。那里 在谓词逻辑中很难捕捉到 多数情况。
【讨论】:
不,您的尝试不正确。它说所有鸟都会飞,也有一些鸟不会飞,所以这是一个矛盾。另请注意,broken(wing) 根本没有提及 x。
作为提示,它应该看起来像
∀x (bird(x) ^ ¬<conditions under which birds don't fly>) → fly(x)
【讨论】:
bird(x) 应该读作“x 是一只鸟”,fly(x) 表示“x 会飞”等等。那么wing(x) 会是什么?
您的问题有一个“序言”标签。在 Prolog 中它可以是:
fly(X, WingCondition) :-
bird(X),
X \= penguin,
X \= ostrich,
WingCondition \= broken.
【讨论】:
所以所有的鸟,而不是企鹅、鸵鸟和折断翅膀的鸟,都能飞
∀x (birds(x) ^ ¬ (birds(x, penguins) ^ bird(x, ostriches) ^ broken_wing(x))) → fly(x))
或者这个可能
∀x (鸟(x) ^ ¬ (鸟(x, 企鹅) ^ 鸟(x, 鸵鸟) ^ 鸟(x,broken_wing))) → 飞(x))
【讨论】: