1

I am new to Protégé so I have a very basic question. I have the classes Child and Parent. Child has the subclass Girl.

child1 has the type Girl, child2 has the type Child and anna and peter have both the type Parent. In addition, there are the relations anna isParentOf child1 and peter isParentOf child2 with no further characteristics.

Now I want to define the class ParentOfGirl so that it is equivalent to Parent and isParentOf only Girl. I would expect that the reasoner infers that anna has this new type, but it does not.

I added the Inverse functional property to isParentOf because a parent can have more than one child. If I then add also Symmetric to the relation I get that anna has the type ParentOfGirl, but I do not want to have isParentOf to be symmetric.

If I look at the semantics of the above without symmetry, I see this:

ParentOfGirl ≡ {anna, peter} ⋂ { x ∊ owl:Thing | if ∀y (x, y) ∊ isParentOf then y ∊ Girl}

child1 ∊ Child and child1 ∊ Girl

isParentOf ≡ {(anna, child1), (peter, child2)}

Then child1 is the only individual of type Child in relation with anna and it has also the type Girl. It seems to me that the reasoner can look at the relations only from right to left in this case because if isParentOf is symmetric, it deduces anna. Furthermore, I would expect that peter would also be in ParentOfGirl if it was not in the relation with child2. But this also does not happen.

Why does the reasoner (Pellet or HermiT) does not see that anna is a ParentOfGirl?

Community
  • 1
  • 1
marli
  • 529
  • 10
  • 19
  • 2
    OWL follows the Open World Assumption (OWA), i.e. in your ontology it's possible that `anna` is parentOf another child which is not a girl. And a reasoner does also follow this OWA and can not infer that `anna` is of type `ParentOfGirl` – UninformedUser Oct 07 '16 at 15:08
  • In addition, for me the semantics of your ontology is not clear. Why do you think `isParentOf` is appropriate to be inverse functional? – UninformedUser Oct 07 '16 at 15:12
  • I would expect that the OWA does not change anything. If we have a knowledge base KB = {PO(a,p)} and I want to infer from KB α = ∀x.POG(x, p) I would get True because all Interpretations of KB satisfy α. Why is the definition of `isParentOf` not the same as for PO? – marli Oct 07 '16 at 16:24
  • If the relation is reverse functional or not is not important for my question, in my opinion. The semantics do not indicate any kind of characterisation of the relation. But it would not contradict reverse functionality. – marli Oct 07 '16 at 16:29
  • 2
    "OWA doesn't change anything" - I don't know what that means. And as I said, you can't infer this because OWL and any OWL reasoner follows the Open World assumption, i.e. facts that are not known are not assumed to be FALSE compared which would be case under the Closed World Assumption, e.g. in databases. That means `anna` might be parent of another child, it's just not known. – UninformedUser Oct 07 '16 at 17:10
  • @AKSW , thank you very much :-) I did not see the wood for the trees. I am so used to have universal quantification in the knowledge base so that I did not realised the effect of OWA here. – marli Oct 08 '16 at 08:40

1 Answers1

1

@AKSW is correct in the comment. The reasoner cannot tell if a parent has only female children. You need to assert this feature, for example by adding a type to the individual.

In this case, this assertion would be equivalent to the inference you seek, though - so it's not a really good workaround.

If you change the forall to some, you will be able to find parents of at least one girl. This is a superclass of your target class, and might help your application along.

Ignazio
  • 10,504
  • 1
  • 14
  • 25
  • What kind of type has to be added to the individual to gain this inference? Is there a global flag for setting the Closed World Assumption in Protégé or something similar or does it make no sense? – marli Oct 10 '16 at 13:48
  • It's a reasoner level setting. Pellet supports it but I'm not sure which other reasoners do. – Ignazio Oct 10 '16 at 13:57