Protege reasoner 不推断 属性 的逆的子类

Protege reasoner not inferring subclasses of inverse of a property

我正在使用 protege5-5 和推理机 HermiT 1.4 3.456。

我有一个 class Animal 包含 2 个子classes Animal1Animal2。我有一个 属性 eats 和一个 属性 isEatenBy,它们被定义为 eats 的倒数。当我在 Animal1 的描述中添加它是 eats some(Animal2) 的子 class 时,我希望推理者在 Animal2 的描述中添加它是子class ] 的 isEatenBy Animal1 但它没有。

知道我应该怎么做才能实现这一点,或者我所期望的无论如何都不应该发生吗?

我认为这里有 3 个问题。

(1) 陈述 Animal1 SubClassOf eats some Animal2 仅说明存在 Animal1 集合的个体子集 eats 至少 1 个个体属于 [=13] 集合=].顶多可以推断出Animal2的一些个体被Animal1吃掉了。也就是那个isEatenBy some Animal1 SubClassOf Animal2。在(3)中我会解释为什么你没有得到这个推论。

最重要的是,它不能推断 Animal2 所有 个个体被 Animal1 吃掉,这是推断 Animal2 SubClassOf isEatenBy some Animal1 所需要的.

(2) 反向角色对个人提出主张。因此,当你有一个关于 特定个体 的陈述时,比如 eats(animal1, animal2) 其中 animal1animal2 是个体,推理者将推断 animal2 isEatenBy animal1.

(3) 像 isEatenBy some Animal1 这样的 class 有时被称为匿名 class 而 class 像 Animal, Animal1Animal2 被称为命名 classes。因为通常可以从一组公理做出的推论数量是无限的,所以推理者将他们的推论限制在命名的 classes.

例如,对于 eats 属性,您可以将域定义为 Animal1,将范围定义为 Animal2。这意味着只要您有 eats(x, y),个人 x 将被推断为 Animal1 类型,个人 y 将被推断为 Animal2 类型。

现在还得到一个等价于isEatenBy some Animal1 SubClassOf Animal2的推论,你需要引入一个新的class,比如AnimalsThatAreEatenByAnimal1等价于isEatenBy some Animal1。推理者现在将推断 AnimalsThatAreEatenByAnimal1Animal2.

的子class

一般来说,要理解推理者可以做出的推论,理解您定义的公理的语义至关重要。为此,您可以查看 direct semantics. For an introduction on the logic, see An Introduction to Description Logics.