2

I'm a beginner in Protege / OWL and I'm having trouble understanding why max cardinality is working and min cardinality is not. I tried Hermit Pellet and Fact as reasoners. I know about the Open World Assumtion, but this seems not logical to me.

I want to express that there must be at least 2 Persons in a Marriage event.

Class: MarriageEvent

EquivalentTo:

This works: MarriageEvent and is_event_of max 2 Person

And this not: MarriageEvent and is_event_of min 2 Person

All individuals are declared as different individuals.

My ontology:

 <?xml version="1.0"?>
 <Ontology xmlns="http://www.w3.org/2002/07/owl#"
 xml:base="http://www.semanticweb.org/anato/ontologies/2017/7/untitled-ontology-184"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:xml="http://www.w3.org/XML/1998/namespace"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
 ontologyIRI="http://www.semanticweb.org/anato/ontologies/2017/7/untitled-ontology-184">
<Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
<Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<Prefix name="xml" IRI="http://www.w3.org/XML/1998/namespace"/>
<Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Declaration>
    <NamedIndividual IRI="#Peter"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#Julia"/>
</Declaration>
<Declaration>
    <ObjectProperty IRI="#is_event_of"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#Max"/>
</Declaration>
<Declaration>
    <Class IRI="#Person"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#Event_Marriage"/>
</Declaration>
<Declaration>
    <Class IRI="#MarriageEvent"/>
</Declaration>
<EquivalentClasses>
    <Class IRI="#MarriageEvent"/>
    <ObjectIntersectionOf>
        <Class IRI="#MarriageEvent"/>
        <ObjectMinCardinality cardinality="2">
            <ObjectProperty IRI="#is_event_of"/>
            <Class IRI="#Person"/>
        </ObjectMinCardinality>
    </ObjectIntersectionOf>
</EquivalentClasses>
<EquivalentClasses>
    <Class IRI="#MarriageEvent"/>
    <ObjectIntersectionOf>
        <Class IRI="#MarriageEvent"/>
        <ObjectMaxCardinality cardinality="2">
            <ObjectProperty IRI="#is_event_of"/>
            <Class IRI="#Person"/>
        </ObjectMaxCardinality>
    </ObjectIntersectionOf>
</EquivalentClasses>
<DisjointClasses>
    <Class IRI="#MarriageEvent"/>
    <Class IRI="#Person"/>
</DisjointClasses>
<ClassAssertion>
    <Class IRI="#MarriageEvent"/>
    <NamedIndividual IRI="#Event_Marriage"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#Julia"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#Max"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#Peter"/>
</ClassAssertion>
<DifferentIndividuals>
    <NamedIndividual IRI="#Event_Marriage"/>
    <NamedIndividual IRI="#Julia"/>
    <NamedIndividual IRI="#Max"/>
    <NamedIndividual IRI="#Peter"/>
</DifferentIndividuals>
<ObjectPropertyAssertion>
    <ObjectProperty IRI="#is_event_of"/>
    <NamedIndividual IRI="#Event_Marriage"/>
    <NamedIndividual IRI="#Julia"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
    <ObjectProperty IRI="#is_event_of"/>
    <NamedIndividual IRI="#Event_Marriage"/>
    <NamedIndividual IRI="#Peter"/>
</ObjectPropertyAssertion>
<SubObjectPropertyOf>
    <ObjectProperty IRI="#is_event_of"/>
    <ObjectProperty abbreviatedIRI="owl:topObjectProperty"/>
</SubObjectPropertyOf>
<IrreflexiveObjectProperty>
    <ObjectProperty IRI="#is_event_of"/>
</IrreflexiveObjectProperty>
<ObjectPropertyDomain>
    <ObjectProperty IRI="#is_event_of"/>
    <Class IRI="#MarriageEvent"/>
</ObjectPropertyDomain>
<ObjectPropertyRange>
    <ObjectProperty IRI="#is_event_of"/>
    <Class IRI="#Person"/>
</ObjectPropertyRange>
</Ontology>

<!-- Generated by the OWL API (version 4.2.8.20170104-2310) https://github.com/owlcs/owlapi -->
Stanislav Kralin
  • 11,070
  • 4
  • 35
  • 58
  • Hm, what do you mean by 'this works' and 'and this not'? – Stanislav Kralin Aug 10 '17 at 10:23
  • I mean that the reasoner complains if I have 3 persons but does NOT compain if I have only 1 Person in a is_event_of realtion. As if the min cardinality restriction is not applied. – theChaosCoder Aug 10 '17 at 10:26
  • Assuming `MarriageEvent` `is_event_of Max`, declare `Person` to be equivalent to `{Max, Julia, Peter}`, and create two negative properties assertions. – Stanislav Kralin Aug 10 '17 at 10:37
  • Ok this works, but is not very handy. Since I would have to declare this every time for each marriage and each person. I plan to add at least 16 more Persons ... Is there any other approach possible? Or is it just not possible to express that 2 Persons have to be in a is_event_of with doman Marriage event in OWA without saying that all other persons do not belong to this relation? – theChaosCoder Aug 10 '17 at 10:46
  • What's the idea of making a recursive class equivalence axiom? You said `A EquivalentTo A and (p min 3 C)`. That's logically redundant – UninformedUser Aug 10 '17 at 11:07
  • And there is no other solution besides the one from Stanislav, exactly because of the OWA there is no violation as there might be another relation to a person which is just not known. – UninformedUser Aug 10 '17 at 11:17
  • And I guess exactly 2 Person is just a different way of saying max 2 and min 2 Persons, that's why it also behaves like the min expression... @AKSW I had once some different results and "A EquivalentTo A and ..." fixed it, so I just kept using it like that ... – theChaosCoder Aug 10 '17 at 11:34
  • Thank you guys for your help. – theChaosCoder Aug 10 '17 at 11:34
  • `min n` + `max n` = `exactly n`, right. – UninformedUser Aug 10 '17 at 11:47
  • you could use the closed-word ICV reasoner from stardog – Mark Miller Aug 11 '17 at 12:39
  • thx, I will try Stardog5. Seems like I use my owl file from Protege!? – theChaosCoder Aug 11 '17 at 14:51

2 Answers2

3

min 2 Person will not complain about marriages where only one person is known because of the Open World Assumption. Just because the second party to the wedding is not known, does not mean that it's not there.

Ignazio
  • 10,504
  • 1
  • 14
  • 25
1

Semantic Web languages such as OWL make the open-world assumption. The absence of a particular statement within the web means, in principle, that the statement has not been made explicitly yet, irrespective of whether it would be true or not, and irrespective of whether we believe that it would be true or not. In essence, from the absence of a statement alone, a deductive reasoner cannot (and must not) infer that the statement is false.

https://en.wikipedia.org/wiki/Open-world_assumption

The absence of a statement about the presence of a 2nd individual does not imply there is not a 2nd individual.

GcL
  • 501
  • 6
  • 16