I am trying to create an OWL Ontology which captures the idea of a disjoint set of elements:
- I have a class
:Parentwhich is all individuals that have elements that I want to ensure are disjoint. - I have a relationship
:element, which connects a:Parentto every child of that parent.element(p, c)is true if p is a parent of c. - I have a relationship
:disjointwhich is between children.disjoint(c1, c2)is true if c1 and c2 are "disjoint". ObviouslyIrreflexiveProperty(:disjoint), as nothing can be disjoint with itself.
My goal is to create an ontology which is consistent iff for every p, if p ∈ Parent then every :element of p is :disjoint with every other :element of p.
The approach I've been trying is to construct a :sibling property such that sibling(x, y) ↔ (x≠y) ∧ (∃p element(p, x) ∧ element(p, y)). I was able to define a property SubObjectProperty( ObjectPropertyChain( ObjectInverseOf( :element ) :element ) :siblingOrSelf ) which captures the set of all of the siblings I want to compare against plus the object itself (plus a set of :siblingOrSelf which are not siblings nor self, but I can ignore). However, I cannot figure out how to derive a :sibling relationship which is irreflexive. (or figure out another way to accomplish my goal)
If it is convenient for the solution, I can assume InverseFunctionalProperty(:element) (i.e. no child is a :element of two different parents).