title: Complement reasoning in OWL and Protege
body: <p>I had recently created a little ontology to practice.
  In my ontology, there exists a class which is EmployedPerson, defined by one SWRL rule: Person(?x), (worksin min 1 Place)(?x) -> EmployedPerson(?x).</p>
  
  <p>Also I have another class which is UnEmployedPerson, defined by a class expression: Equivalent to (Person and (not (EmployedPerson))), which means UnEmployedPerson is complement of EmployedPerson.</p>
  
  <p>Both mentioned classes(EmployedPerson and UnEmployedPerson) are subclasses of Person, and person is set as "EmployedPerson or UnEmployedPerson".
  Person class has three individuals: Ivan, Lenka and Martin. All individuals are different individuals.</p>
  
  <p>Another class Place, has an individual "WorksApplication". The object property 'worksin' links class 'Person' and class 'Place'.</p>
  
  <p>In my ontology, there are two axioms: 
  Lenka worksin Worksapplication
  Martin worksin Worksapplication
  After reasoning by Pellet and HermiT, Lenka and Martin could be inferred as members of EmployedPerson based on SWRL rule.</p>
  
  <p>For Ivan doesn't belong to EmployedPerson, and UnEmployedPerson is complement of  EmployedPerson, so Evan should be inferred as a member of class UnEmployedPerson .</p>
  
  <p>But in fact, after the reasoning by Pellet and Hermit, Ivan can not be inferred in class UnEmployedPerson . The result didn't meet my expectation. 
  Is there something wrong with my ONTOLOGY, or I neglect the effect of OWA ?
  Please help me deal with that problem, I want to see Ivan is inferred in class UnEmployedPerson!!</p>
  
  <p>Here is my ontology that demonstrates this behavior:</p>
  
  <pre><code>&lt;Declaration&gt;
      &lt;Class IRI="#Adult"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;Class IRI="#EmployedPerson"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;Class IRI="#Parent"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;Class IRI="#Person"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;Class IRI="#Place"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;Class IRI="#UnemployedPerson"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;ObjectProperty IRI="#wokrsin"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;NamedIndividual IRI="#Ivan"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;NamedIndividual IRI="#Lenka"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;NamedIndividual IRI="#Martin"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;NamedIndividual IRI="#TreatHighBloodSugar"/&gt;
  &lt;/Declaration&gt;
  &lt;Declaration&gt;
      &lt;NamedIndividual IRI="#worksapplication"/&gt;
  &lt;/Declaration&gt;
  &lt;EquivalentClasses&gt;
      &lt;Class IRI="#Person"/&gt;
      &lt;ObjectUnionOf&gt;
          &lt;Class IRI="#EmployedPerson"/&gt;
          &lt;Class IRI="#UnemployedPerson"/&gt;
      &lt;/ObjectUnionOf&gt;
  &lt;/EquivalentClasses&gt;
  &lt;EquivalentClasses&gt;
      &lt;Class IRI="#UnemployedPerson"/&gt;
      &lt;ObjectIntersectionOf&gt;
          &lt;Class IRI="#Person"/&gt;
          &lt;ObjectComplementOf&gt;
              &lt;Class IRI="#EmployedPerson"/&gt;
          &lt;/ObjectComplementOf&gt;
      &lt;/ObjectIntersectionOf&gt;
  &lt;/EquivalentClasses&gt;
  &lt;SubClassOf&gt;
      &lt;Class IRI="#Adult"/&gt;
      &lt;Class IRI="#Person"/&gt;
  &lt;/SubClassOf&gt;
  &lt;SubClassOf&gt;
      &lt;Class IRI="#EmployedPerson"/&gt;
      &lt;Class IRI="#Person"/&gt;
  &lt;/SubClassOf&gt;
  &lt;SubClassOf&gt;
      &lt;Class IRI="#Parent"/&gt;
      &lt;Class IRI="#Person"/&gt;
  &lt;/SubClassOf&gt;
  &lt;SubClassOf&gt;
      &lt;Class IRI="#UnemployedPerson"/&gt;
      &lt;Class IRI="#Person"/&gt;
  &lt;/SubClassOf&gt;
  &lt;DisjointClasses&gt;
      &lt;Class IRI="#Person"/&gt;
      &lt;Class IRI="#Place"/&gt;
  &lt;/DisjointClasses&gt;
  &lt;ClassAssertion&gt;
      &lt;Class IRI="#Person"/&gt;
      &lt;NamedIndividual IRI="#Ivan"/&gt;
  &lt;/ClassAssertion&gt;
  &lt;ClassAssertion&gt;
      &lt;Class IRI="#Person"/&gt;
      &lt;NamedIndividual IRI="#Lenka"/&gt;
  &lt;/ClassAssertion&gt;
  &lt;ClassAssertion&gt;
      &lt;Class IRI="#Person"/&gt;
      &lt;NamedIndividual IRI="#Martin"/&gt;
  &lt;/ClassAssertion&gt;
  &lt;ClassAssertion&gt;
      &lt;Class IRI="#Place"/&gt;
      &lt;NamedIndividual IRI="#worksapplication"/&gt;
  &lt;/ClassAssertion&gt;
  &lt;DifferentIndividuals&gt;
      &lt;NamedIndividual IRI="#Ivan"/&gt;
      &lt;NamedIndividual IRI="#Lenka"/&gt;
  &lt;/DifferentIndividuals&gt;
  &lt;DifferentIndividuals&gt;
      &lt;NamedIndividual IRI="#Ivan"/&gt;
      &lt;NamedIndividual IRI="#Martin"/&gt;
  &lt;/DifferentIndividuals&gt;
  &lt;DifferentIndividuals&gt;
      &lt;NamedIndividual IRI="#Ivan"/&gt;
      &lt;NamedIndividual IRI="#worksapplication"/&gt;
  &lt;/DifferentIndividuals&gt;
  &lt;DifferentIndividuals&gt;
      &lt;NamedIndividual IRI="#Lenka"/&gt;
      &lt;NamedIndividual IRI="#Martin"/&gt;
  &lt;/DifferentIndividuals&gt;
  &lt;DifferentIndividuals&gt;
      &lt;NamedIndividual IRI="#Lenka"/&gt;
      &lt;NamedIndividual IRI="#worksapplication"/&gt;
  &lt;/DifferentIndividuals&gt;
  &lt;DifferentIndividuals&gt;
      &lt;NamedIndividual IRI="#Martin"/&gt;
      &lt;NamedIndividual IRI="#worksapplication"/&gt;
  &lt;/DifferentIndividuals&gt;
  &lt;ObjectPropertyAssertion&gt;
      &lt;ObjectProperty IRI="#wokrsin"/&gt;
      &lt;NamedIndividual IRI="#Lenka"/&gt;
      &lt;NamedIndividual IRI="#worksapplication"/&gt;
  &lt;/ObjectPropertyAssertion&gt;
  &lt;ObjectPropertyAssertion&gt;
      &lt;ObjectProperty IRI="#wokrsin"/&gt;
      &lt;NamedIndividual IRI="#Martin"/&gt;
      &lt;NamedIndividual IRI="#worksapplication"/&gt;
  &lt;/ObjectPropertyAssertion&gt;
  &lt;DLSafeRule&gt;
      &lt;Body&gt;
          &lt;ClassAtom&gt;
              &lt;Class IRI="#Person"/&gt;
              &lt;Variable abbreviatedIRI="var:x"/&gt;
          &lt;/ClassAtom&gt;
          &lt;ClassAtom&gt;
              &lt;ObjectMinCardinality cardinality="1"&gt;
                  &lt;ObjectProperty IRI="#wokrsin"/&gt;
                  &lt;Class IRI="#Place"/&gt;
              &lt;/ObjectMinCardinality&gt;
              &lt;Variable abbreviatedIRI="var:x"/&gt;
          &lt;/ClassAtom&gt;
      &lt;/Body&gt;
      &lt;Head&gt;
          &lt;ClassAtom&gt;
              &lt;Class IRI="#EmployedPerson"/&gt;
              &lt;Variable abbreviatedIRI="var:x"/&gt;
          &lt;/ClassAtom&gt;
      &lt;/Head&gt;
  &lt;/DLSafeRule&gt;
  </code></pre>
  
  <p></p>