theChaosCoder
theChaosCoder

Reputation: 79

min cardinality not working as expected in Protege

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 -->

Upvotes: 2

Views: 1788

Answers (2)

GcL
GcL

Reputation: 615

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.

Upvotes: 1

Ignazio
Ignazio

Reputation: 10684

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.

Upvotes: 3

Related Questions