我有一个简单的问题,我怀疑它没有简单的答案。本质上,我想检查一个 OWL 表达式 (#B) 从另一个 (#A) 逻辑上遵循是否是真的 - 换句话说,我想问:#A -> #B 是真的吗?
原因是我正在为应用程序编写匹配算法,该算法将基于知识的结构(由#KnowledgeStructure 类表示)与描述当前应用程序状态需求的结构(#StateRequirement)匹配。两种结构都具有属性,这些属性具有表示第三种结构(#Model)状态下的 OWL 表达式的字符串值。它们是: #KnowledgeStructure.PostCondition 表示应用于#Model 的知识结构将如何转换#Model;和#StateRequirement.GoalCondition,它表示应用程序旨在实现的#Model 状态。因此,我想通过检查#KnowledgeStructure.PostCondition 是否产生所需的#StateRequiremment.GoalCondition 来查看#KnowledgeStructure 是否满足#StateRequirement。我可以抽象地表达为:(#KnowledgeStructure.Postcondition => #StateRequirement.GoalCondition) => Match(#KnowledgeStructure, #StateRequirement)。不太容易混淆,我可以将其表示为: ((#A -> #B) -> Match(#A, #B)) 其中 #A 和 #B 都是有效的 OWL 表达式。
在一般情况下,我希望能够表达以下规则:“如果表达式 #B 从 #A 遵循是真的,那么表达式 Match(#A, #B) 也是真的”。
本质上,我的问题是:我如何在 OWL 中提出或实现这样的规则?如何测试一个表达式是否来自另一个表达式?此外,如果没有明确说明这种关系,现有的推理器是否足够强大来确定两个表达式之间的关系 #A -> #B?