用Pellet和HermiT理解Protege中的通用量化

时间:2016-10-07 13:06:16

标签: logic owl protege reasoning pellet

我是Protégé的新手,所以我有一个非常基本的问题。 我有课程ChildParentChild具有子类Girl

child1的类型为Girlchild2的类型为Childannapeter的类型均为Parent }。此外,关系anna isParentOf child1peter isParentOf child2没有其他特征。

现在我想定义类ParentOfGirl,使其等同于Parent and isParentOf only Girl。我希望推理者推断anna有这种新类型,但事实并非如此。

我将Inverse functional属性添加到isParentOf,因为父级可以有多个子级。如果我然后将Symmetric添加到我得到的anna类型为ParentOfGirl的关系中,但我不希望isParentOf具有对称性。

如果我看一下上面没有对称性的语义,我会看到:

  

ParentOfGirl≡{anna,peter}⋂{xε猫头鹰:事情|如果∀y(x,y)ε是父亲,则yεTeat}

     

child1ε儿童和儿童1ε女孩

     

isParentOf≡{(anna,child1),(peter,child2)}

然后child1是与Child相关的anna类型的唯一个人,并且还有类型Girl。在我看来,推理者只能在这种情况下从右到左查看关系,因为如果isParentOf是对称的,它会推导出anna。此外,如果peter与child2没有关系,我希望ParentOfGirl也在anna。但这也不会发生。

为什么推理者(Pellet或HermiT)看不到ParentOfGirl是{{1}}?

1 个答案:

答案 0 :(得分:1)

@AKSW在评论中是正确的。推理者无法判断父母是否只有女孩。您需要断言此功能,例如向个人添加类型。

在这种情况下,这个断言相当于你所寻求的推理 - 所以它不是一个非常好的解决方法。

如果你将forall改为某些人,你将能够找到至少一个女孩的父母。这是目标类的超类,可能有助于您的应用程序。