我想在Protégé中代表一个球容器。我有一个RedBallContainer类是一个容器,一个RedBall是一个球,如下图所示:
我创建了一个属性Contains,该属性包含域Container和Range Ball。
现在我想说“如果一个容器仅包含红球,则它就是RedBallContainer”。为此,我添加了以下规则:
现在,当我运行推理机时,它告诉我Container类等于Thing,但我认为我要表示的内容是错误的!这是推理机推断的图片:
我在做什么错了?
答案 0 :(得分:0)
好吧,您的限制规则不正确。它说
“ RedballContainer等效于仅 包含RedBallContainers的类”
应为:
“ RedballContainer等效于仅 包含RedBalls的类”
编辑,因为您发现上述修复并未删除奇怪的推断对等关系。出现这种情况的原因有些令人费解,但大致是这样:
contains
的域是Container
,因此,根据定义,任何使用contains
属性的事物都是Container
。RedBallContainer
等同于仅包含RedBall
的任何内容,因此,仅包含红球的任何项目都是一个红球容器。 RedBallContainer
是Container
的子类。现在想象一下某个不是Container
的项目。可能有两个选择:它要么包含某些内容,要么不包含任何内容。如果确实包含某些内容,那么根据定义1,它毕竟仍然是Container
。
但是,如果它不不包含任何东西,则意味着它所包含的所有球实际上都是红色球(因为其中所包含的零球都不是红色球)!根据我们的第二个定义,这个东西因此是RedBallContainer
。因此,根据我们的第三个定义,它必须是Container
。
简而言之,在这套规则下,某事物不可能不是Container
。一切都是Container
,因此Container
和Thing
是等效的。
啊,逻辑。
要解决此问题,您可以更改限制,使RedBallContainer
等同于仅包含红球的任何Container
:
EquivalentTo Container and contains only RedBall