我认为这里有3个问题。
(1)Animal1 SubClassOf eats some Animal2仅说明该集合中存在一个个体子集,Animal1其中eats至少有 1 个个体属于 集合Animal2。最多你可以推断出一些人Animal2被吃掉了Animal1。就是这样isEatenBy some Animal1 SubClassOf Animal2。在(3)中,我将解释为什么你没有得到这个推论。
最重要的是它不能推断出所有个体Animal2都被吃掉了Animal1,这是需要推断的Animal2 SubClassOf isEatenBy some Animal1。
(2) 反向角色对个人提出主张。因此,当您有关于特定个体的陈述(例如eats(animal1, animal2)whereanimal1和animal2are individual)时,推理器会推断出animal2 isEatenBy animal1.
(3) 类似的类isEatenBy some Animal1有时被称为匿名类,而像Animal和Animal1的类Animal2则被称为命名类。因为通常可以从一组公理中做出的推论的数量是无限的,所以推理者将他们的推论限制在命名类中。
例如,对于您的eats属性,您可以将域定义为Animal1,将范围定义为Animal2。这意味着无论何时你有eats(x, y),个人x将被推断为类型Animal1和个人y将被推断为类型Animal2。
为了现在也得到一个等价的推论isEatenBy some Animal1 SubClassOf Animal2,你需要引入一个新的类,说它AnimalsThatAreEatenByAnimal1等价于isEatenBy some Animal1。推理器现在将推断这AnimalsThatAreEatenByAnimal1是 的子类Animal2。
一般来说,要理解推理者可以做出的推论,理解你定义的公理的语义至关重要。为此,您可以查看直接语义。有关逻辑的介绍,请参阅描述逻辑简介。