Question

I'm currently creating an Ontology about Inventions in Protégé 4.

I declared :

  • a property fulfills
  • two classes : Invention and Need

Still on Protégé, my class Invention is defined by the following assertion :

Invention subClassOf fulfills exactly 1 Need

This means I don't want any individual of type Invention which doesn't fulfills a Need or more than one.

To test this assertion, I created an individual of type Invention called Boots and two individuals of type Need called respectively Move_faster and Eat_faster.

I asserted that Boots fulfills Move_faster and Boots fulfills Eat_faster, which should break my consistency because an Invention is supposed to fulfill only one Need.

But, when I launch HermiT reasoner, my ontology is still consistent, and even when :

  • Boots fulfills nothing
  • Boots fulfills any individual which is not a Need

Is it normal ?

Thanks

Was it helpful?

Solution

Yes, this is all normal. OWL has an open world assumption, and does not have a unique name assumption. Taken together, this means that given two names (e.g. Move_faster and Eat_faster), an OWL reasoner cannot make any assumptions as to whether these names actually denote the same individual.

The ontology you describe is not inconsistent, because it's possible that Move_faster and Eat_faster are actually the same thing (indeed, an OWL reasoner will make exactly that conclusion), in which case it will still be true that Boots fulfills exactly one Need. The only way to create an inconsistency here is to add the assertion Move_faster owl:differentFrom Eat_faster.

Similarly, if Boots fulfills nothing in your ontology, an OWL reasoner will simply assume that there is some unnamed Need that Boots does fulfill. This is the open-world assumption at work.

Boots fulfilling something which is not (known to be) a Need is also not an inconsistency, because the fulfills exactly 1 Need restriction says nothing about things an instance of that class might fulfill which aren't members of Need. You would need to add an allValuesFrom restriction to make this an inconsistency - and even then, it's only inconsistent if the thing fulfilled is known to be a member of a class which is disjoint from Need.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top