使用A a 作为属性名称有点不寻常,所以我将使用p代替。UML 图也没有表达属性的方向,这使得其余的讨论有点混乱。不过,可以从您提供的公理中收集到一些信息。
如果 UML 旨在表达:
- C 1的实例通过p与 C 2的至少 n l和大多数 n u实例相关联。
- C 1的至少 m l和大多数 m u实例通过p与 C 2的每个实例相关。
那么你可以使用 DL 公理:
C 1 ⊑ ≥n l pC 2
C 1 ⊑ ≤n u pC 2
C 2 ⊑ ≥m l p -1 .C 1
C 2 ⊑ ≥m u p -1 .C 1
那些说如果x 是一个 C 1 (C 2 ),那么 x 与适当数量的 C 2 (C 1 ) 实例相关联p ( p -1 )。现在,由于在 UML 中表达的关系只会关联两个类的实例,即没有其他类型的实例将通过属性p关联,那么您更有可能将p的域和范围声明为 C 1和C 2分别具有:
∃p ⊑ C 1
∃p -1 ⊑ C 2
然后使用上述公理的更简单版本:
C 1 ⊑ ≥n l p
C 1 ⊑ ≤n u p
C 2 ⊑ ≥m l p -1
C 2 ⊑ ≥m u p -1
要回答非常具体的问题:
只是无法理解 C2 强制参与断言是如何通过 C1 上的断言来表达的,最后一个断言是如何读取的?
问题中最后一个公理中的符号不寻常,我不确定到底应该是什么。我不确定这些小回旋曲应该是什么。它看起来像:
C 1 ⊑ ∃ p
尽管。如果是这样,它被读作
C 1是∃ p 的子类
这意味着
如果x是 C 1的实例,则x是 ∃ p 的实例
意思就是
如果x是 C 1的一个实例,则x是至少具有p值的事物类别的一个实例(即,至少有一个y使得p (x,y))。
在一阶逻辑中,您可以将其表示为:
∀x.(C 1 (x) → ∃yp(x,y))