【问题标题】:Why would adding disjunction to OWL EL make it more computationally complex?为什么将析取添加到 OWL EL 会使其计算更加复杂?
【发布时间】:2018-08-23 12:37:33
【问题描述】:

我试图理解为什么在 OWL EL 中添加析取会使语言在计算上更加复杂(例如,为什么添加“或”会使多项式时间内的可满足性、一致性和/或包含性检查变得不可能......他们)标准OWL EL中的re p-time)

OWL EL 配置文件除其他外不允许析取和否定。我无法理解为什么无法使用现有的 OWL EL 构造来实现析取,方法是创建包含给定类表达式的析取项作为子集的新类。

例如,可以表达(曼彻斯特语法):

  Class1 and (Class2 or Class3) and (Property1 some (Class3 or Class4))

改写为:

  Class1 and NewClass1 and (Property1 some NewClass2)

  where Class2 is a subset of NewClass1,
        Class3 is a subset of NewClass1,
        Class3 is a subset of NewClass2,
        Class4 is a subset of NewClass2

?

我知道答案是“不”,但为什么是“不”?

【问题讨论】:

  • 也许定理 7 here。完整证明应该是here
  • 在下面的答案和其他 cmets 中提供了长而完整的答案。非常简短的版本:考虑画面树。 or 引入了一个分叉,使该分支所需的工作量加倍(对于具有两个操作数的 or)。

标签: rdf complexity-theory owl ontology protege


【解决方案1】:

“重写为”我猜你的意思是用命名类C_or_D 替换原始本体中的所有析取表达式C or D 并添加公理:

`C subClassOf C_or_D`
`D subClassOf C_or_D`

您必须递归地执行此操作,因为C(分别为D)本身可能包含析取。然后你就有了一个包含更多公理、更多概念名称但语义看起来非常接近的本体。然而,当你怀疑自己时,你错了。考虑以下示例:

A subClass C or D
C subClassOf B
D subClassOf B

使用你提议的重写,你得到:

A subClass C_or_D
C subClassOf C_or_D
D subClassOf C_or_D
C subClassOf B
D subClassOf B

第一个本体包含A subClassOf B,而第二个没有。

一般来说,析取在推理中是有问题的,因为它会导致选择。如果你想,比如说,检查一致性,你必须尝试为备选方案的一个分支找到可能的世界排列,如果失败,为备选方案的第二个分支找到可能的世界排列。每个析取可能将处理时间乘以 2。使用 n 个析取,您可能会得到 2 次方的 n 种可能性进行探索。

在命题逻辑中也是如此:如果你有一个没有出现析取的合取范式,那么可满足性就是一个愚蠢的简单问题。当你允许析取时,它是 NP 完全的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-13
    • 2019-07-13
    • 2018-06-18
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2012-07-11
    • 2020-03-11
    相关资源
    最近更新 更多