Protege reasoner 不推断 属性 的逆的子类
Protege reasoner not inferring subclasses of inverse of a property
我正在使用 protege5-5 和推理机 HermiT 1.4 3.456。
我有一个 class Animal
包含 2 个子classes Animal1
和 Animal2
。我有一个 属性 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)
其中 animal1
和 animal2
是个体,推理者将推断 animal2 isEatenBy animal1
.
(3) 像 isEatenBy some Animal1
这样的 class 有时被称为匿名 class 而 class 像 Animal
, Animal1
和 Animal2
被称为命名 classes。因为通常可以从一组公理做出的推论数量是无限的,所以推理者将他们的推论限制在命名的 classes.
例如,对于 eats
属性,您可以将域定义为 Animal1
,将范围定义为 Animal2
。这意味着只要您有 eats(x, y)
,个人 x
将被推断为 Animal1
类型,个人 y
将被推断为 Animal2
类型。
现在还得到一个等价于isEatenBy some Animal1 SubClassOf Animal2
的推论,你需要引入一个新的class,比如AnimalsThatAreEatenByAnimal1
等价于isEatenBy some Animal1
。推理者现在将推断 AnimalsThatAreEatenByAnimal1
是 Animal2
.
的子class
一般来说,要理解推理者可以做出的推论,理解您定义的公理的语义至关重要。为此,您可以查看 direct semantics. For an introduction on the logic, see An Introduction to Description Logics.
我正在使用 protege5-5 和推理机 HermiT 1.4 3.456。
我有一个 class Animal
包含 2 个子classes Animal1
和 Animal2
。我有一个 属性 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)
其中 animal1
和 animal2
是个体,推理者将推断 animal2 isEatenBy animal1
.
(3) 像 isEatenBy some Animal1
这样的 class 有时被称为匿名 class 而 class 像 Animal
, Animal1
和 Animal2
被称为命名 classes。因为通常可以从一组公理做出的推论数量是无限的,所以推理者将他们的推论限制在命名的 classes.
例如,对于 eats
属性,您可以将域定义为 Animal1
,将范围定义为 Animal2
。这意味着只要您有 eats(x, y)
,个人 x
将被推断为 Animal1
类型,个人 y
将被推断为 Animal2
类型。
现在还得到一个等价于isEatenBy some Animal1 SubClassOf Animal2
的推论,你需要引入一个新的class,比如AnimalsThatAreEatenByAnimal1
等价于isEatenBy some Animal1
。推理者现在将推断 AnimalsThatAreEatenByAnimal1
是 Animal2
.
一般来说,要理解推理者可以做出的推论,理解您定义的公理的语义至关重要。为此,您可以查看 direct semantics. For an introduction on the logic, see An Introduction to Description Logics.