我一直在四处寻找为什么 OWL Full 是不可判定的,但我还没有找到一个易于理解的例子来让我理解它。
我找到了解释这是由于“蕴涵封闭”的陈述,这也与 OWL Full 可以同时具有属性和个人的类这一事实相关。
但我不明白这些陈述之间的关系。
我一直在四处寻找为什么 OWL Full 是不可判定的,但我还没有找到一个易于理解的例子来让我理解它。
我找到了解释这是由于“蕴涵封闭”的陈述,这也与 OWL Full 可以同时具有属性和个人的类这一事实相关。
但我不明白这些陈述之间的关系。
这是一个足以理解为什么 OWL 2 Full 不可判定的例子。这与罗素悖论有关。
在 OWL Full 中,您可以定义一个以自身为实例的类:
:IsInstanceOfItself a :IsIntanceOfItself .
这在 RDF/RDFS 中也是可能的,但它不会使逻辑不可判定。导致不可判定性的原因是您可以在 OWL 2 Full 中定义自相矛盾的类。您可以定义以自身为实例的类的类:
:HaveThemselvesAsInstance
rdfs:subClassOf [
a owl:Restriction;
owl:onProperty rdf:type;
owl:hasSelf true
] .
然后你可以定义没有自己作为实例的类:
:DoNotHaveThemselvesAsInstance
owl:equivalentClass [ owl:complementOf :HaveThemselvesAsInstance ] .
现在,我们可以问一个问题:它:DoNotHaveThemselvesAsInstance
本身是一个实例吗?假设是这种情况。然后:
:DoNotHaveThemselvesAsInstance a :DoNotHaveThemselvesAsInstance .
是真的。因此,遵守其在与自身与属性:DoNotHaveThemselvesAsInstance
没有关系的类中的定义。rdf:type
所以假设是错误的。因此:DoNotHaveThemselvesAsInstance
必须在那些rdf:type
与自己有的类的补充。所以它必须是:DoNotHaveThemselvesAsInstance
. 所以上面假设的关系应该成立。回到最初的步骤。因此,任何本体都不能有任何模型来定义上面定义的类。所以不可能有一类没有自己作为实例的类。所以也许,所有的类都有自己作为实例,也许?但是有一些本体模型,其中一些类不是它们自己的实例。所以... OWL 2 Full 真的很糟糕,不是吗?
你的问题很有道理,也不容易回答。此外,OWL-DL 和 OWL-Full 之间的区别并不固定。最初在 OWL 中受到限制的东西后来被允许使用,最流行的情况是双关语。
但基本上,这个想法是能够编写一个可以回答是或否并避免不知道或“无限”不知道的推理器。这个关于 Tableaux 算法的 30 分钟讲座以及同一课程前后的其他几个讲座可能会有所帮助。
顺便说一句,计算蕴涵闭合的不可判定性和不可能性不是一回事。
虽然 OWL Full 和 OWL DL 的数学构造函数集是相同的,但 OWL Full 对这些构造函数的使用没有限制;想想对传递属性的使用缺乏限制,看看为什么 OWL Full 是不可判定的。
对我来说,了解 OWL Full undecidability 的最简单方法是查看 OWL 2 DL 全局限制,特别是简单角色部分:https ://www.w3.org/TR/owl2-syntax/#Global_Restrictions_on_Axioms_in_OWL_2_DL 。单独删除这些限制的 OWL 2 DL 是无法确定的,包含这些限制的 OWL 2 Full 也是如此。
这些幻灯片http://www.cs.man.ac.uk/~horrocks/Slides/ijcai-slides.pdf包含为什么放宽(某些)上述限制会使逻辑无法确定的链接。