# [DL] How does one handle multiple parents while still controlling disjointness?

William Fitzgerald wfitzgerald at tssg.org
Thu Oct 15 17:47:58 CEST 2009

```Thanks Uli and Maurizo for your repsonses.

It turns out the way I defined it below work if and only if I define
ClassAB as an equivalent class.

That is ClassAB = ClassA intersection ClassB

Then any member that is a member of ClassA and is also a member of
ClassB *must* also be a member of ClassAB. So if I define individual a1
as a member of ClassA1 and then try assert that it is also a member of
ClassB1 then I should get an inconsistency given ClassA1 is disjoint to
ClassAB and ClassB1 is disjoint to ClassAB.

So it all boiled down to the making the class "necessary and sufficient".

Also a few house keeping tricks I learnt for the pellet forum along with
the later half of this email threat, is that, given I have a controlled
number of subclasses of say ClassA or ClassB, one could ensure that any
member of ClassA must also be a member of at least one of its
subclasses. That is apply a "covering" axiom with the union operator.

So ClassA= ClassA1 union ClassA2 union ClassA3 union ClassAB

(of course this "complete" class definiton also implies subsumption
(subclassOf)).

brain is in sponge mode and soaking up knowledge readily (for the moment
at least :-) ).

Regards,
Will.

Uli Sattler wrote:
>
> On 9 Oct 2009, at 19:58, William Fitzgerald wrote:
>
>> Dear Experts,
>>
>> A modelling question based on your experience.
>>
>> What is normal practice when, for the most part you desire that two
>> sibling classes and their associated subclasses be disjoint except
>> for one or two subclasses that have both sibling classes as parents,
>> in which case they are not disjoint!
>>
>> Consider two parent classes ClassA and ClassB.
>> ClassA:
>> ClassA1 subClassOf ClassA
>> ClassA2 subClassOf ClassA
>> ClassA3 subClassOf ClassA
>> ClassAB subClassOf ClassA
>>
>> All subclasses of ClassA are disjoint
>>
>> ClassB:
>> ClassB1 subclass of ClassB
>> ClassB2 subclass of ClassB
>> ClassAB subClassOf ClassB
>>
>> All subclasses of ClassB are disjoint
>>
>> There is a common class called ClassAB common to both ClassA and ClassB.
>>
>> Modelling Question:
>> Because of the poly-hierarchy, ClassA and ClassB cannot be disjoint.
>> No issue here.
>>
>> However, how does one prevent the possibility of instances of, for
>> example, classA1 becoming instances of ClassB1 or ClassB in general?
>>
>> If the poly-hierarchy did not exist, then this is easily done by
>> making ClassA and ClassB disjoint.
>>
>> What do DL knowledge engineers do in this case?
>>
>> Do you:
>> 1) ignore/abstract away from the possibility of instances of one
>> class being members of another? Thereby sticking to the above class
>> hierarchy.
>>
>> 2) Manually assert cross-class disjointness.
>
> In OWL 2, you could simply add one axiom
>
> DisjointClasses(A1 A2 A3 B1 B2)
>
> I agree that this becomes a bit cumbersome because it needs changing
> when, say, you add a class B3. On the other hand, how should the
> system know which subclasses are disjoint and which aren't...
Yep my thinking exactly in point 2) above, it becomes unmanageable as
new subclasses are created.
>
>> That is, along with stating that all subclasses of ClassA are
>> disjoint, one now has to also say that ClassA1 isDisjointTo ClassB1
>> or perhaps even ClassB (might be a shorter route) and so forth. My
>> guess is that, its not feasible if there are hundreds of classes!
>>
Maurizio had the same idea as above and would be a shorter route than
having to assert disjointness for each subclass of ClassB.
>> 3) Define a new class on the same hierarchy level (sibling class) as
>> ClassA and ClassB called ClassCommonAB. Then set ClassAB as a
>> subclass of ClassCommonAB only and remove ClassAB from ClassA and
>> ClassB.
>>
>> That is:
>> ClassA:
>> ClassA1 subClassOf ClassA
>> ClassA2 subClassOf ClassA
>>
>> All subclasses of ClassA are disjoint
>>
>> ClassB:
>> ClassB1 subclass of ClassB
>> ClassB2 subclass of ClassB
>>
>> ClassCommonAB:
>> ClassAB
>>
>> ClassA, ClassB and ClassCommonAB are all disjoint.
>>
>> While this approach now allows for totally disjointness, that is,
>> members of ClassA1 are not also members of ClassA2 nor ClassB nor
>> ClassAB. Perfect!
>>
>> However, this approach also has its downside in that ClassAB has now
>> no meaningful connection to ClassA or ClassB!
>
> Alternatively, you could introduce two intermediate subclasses Ax and
> Bx that sit between Ai and A, Bi and B as follows:
>
> Bx SubClassOf B
> Ax SubClassOf A
>
> DisjointUnion(Bx B1 B2 B3)
> DisjointUnion(Ax A1 A2 A3)
>
> DisjointClasses(Ax Bx)
>
> and leave
>
> AB SubClassOf A
> AB SubClassOf B
>
> as it was before...
>
> Cheers, Uli
>
>>
>> kind regards,
>> Will.
>>
>> ---
>> **  You received this mail via the description logic mailing list;
>> for more  **
>> **  information, visit the description logic homepage at
>> http://dl.kr.org/.  **
>

```