使用 Pellet 和 HermiT 了解 Protege 中的通用量化

Understanding Universal Quantification in Protege with Pellet and HermiT

我是 Protégé 的新手,所以我有一个非常基本的问题。 我有 classes ChildParentChild 有子class Girl.

child1 的类型为 Girlchild2 的类型为 Childannapeter 的类型均为 Parent。此外,还有关系 anna isParentOf child1peter isParentOf child2 没有进一步的特征。

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

我将 Inverse functional 属性 添加到 isParentOf 因为一个 parent 可以有多个 child。如果我然后也将 Symmetric 添加到关系中,我得到 anna 具有类型 ParentOfGirl,但我不想 isParentOf 是对称的。

如果我不对称地看上面的语义,我会看到:

ParentOfGirl ≡ {anna, peter} ⋂ { x ∊ owl:Thing | if ∀y (x, y) ∊ isParentOf then y ∊ Girl}

child1 ∊ Child and child1 ∊ Girl

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

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

为什么推理者(Pellet 或 HermiT)看不出 annaParentOfGirl

@AKSW 在评论中是正确的。推理者无法判断 parent 是否只有女性 children。您需要断言此功能,例如通过为个人添加类型。

在这种情况下,此断言等同于您寻求的推论 - 所以这不是一个很好的解决方法。

如果将 forall 更改为 some,您将能够找到至少一个女孩的 parents。这是您的目标 class 的超级class,可能有助于您的申请。