RDF/RDFS Reasoning Capabilities

• Type inheritance through `rdfs:subclassOf`. For example, the facts
```(rdf:type Morris Cat)
(rdfs:subClassOf Cat Mammal)
```
imply the fact
```(rdf:type Morris Mammal)
```
• Reflexivity of `rdfs:subPropertyOf` and `rdfs:subclassOf`. For any `rdf:Property` `p`, the fact
```(rdfs:subPropertyOf p p)
```
is inferred. For any Class `C`, the fact
```(rdfs:subClassOf C C)
```
is inferred.
• Type inference through `rdfs:range` and `rdfs:domain` constraints. For example, the facts
```(rdfs:domain teaches Teacher)
(rdfs:range teaches Student)
(teaches Bob Scooter)
```
imply the facts
```(rdf:type Bob Teacher)
(rdf:type Scooter Student)
```
• Transitivity of `rdfs:subClassOf` and `rdfs:subPropertyOf`. For example, the facts
```(rdfs:subClassOf Dog Mammal)
(rdfs:subClassOf Mammal Animal)
```
imply the fact
```(rdfs:subClassOf Dog Animal)
```
Similarly, the facts
```(rdfs:subPropertyOf parent ancestor)
(rdfs:subPropertyOf ancestor relative)
```
imply the fact
```(rdfs:subPropertyOf parent relative)
```

OWL Reasoning Capabilities

OWL reasoning capabilities include the RDF/RDFS reasoning capabilities as well as the following capabilities. In all references to reasoning with `rdfs:subClassOf`, the same type of reasoning is done with `owl:subClassOf`.
• Enforcing transitivity of `owl:TransitiveProperty`. For example, the facts
```(rdf:type ancestor owl:TransitiveProperty)
(ancestor Sue Mary)
(ancestor Mary Anne)
```
imply the fact
```(ancestor Sue Anne)
```
• Semantics of `owl:SymmetricProperty` is enforced.
• Reasoning with `owl:inverseOf`. For example, the facts
```(owl:inverseOf parentOf hasParent)
(parentOf Goldie Kate)
```
imply the fact
```(hasParent Kate Goldie)
```
• Inheritance of disjointness constraints. For example, the facts
```(owl:disjointWith Plant Animal)
(rdfs:subClassOf Mammal Animal)
```
imply the fact
```(owl:disjointWith Plant Mammal)
```
• When an `owl:sameAs` relationship is asserted or inferred between two entities that are known to be classes, an `owl:equivalentClass` relationship is inferred between the classes. Similarly, when an `owl:sameAs` relationship is asserted or inferred between two entities that are known to be properties, an `owl:equivalentProperty` relationship is inferred between the classes. For example, the facts
```(owl:sameAs Human Person)
(rdf:type Human rdfs:Class)
(rdf:type Person rdfs:Class)
```
imply the fact
```(owl:equivalentClass Human Person)
```
• All the subclasses of a given class are disjoint with the class's complement. For example, the facts
```(owl:complementOf Animal NonAnimals)
(rdfs:subClassOf Mammal Animal)
```
imply the fact
```(owl:disjointWith Mammal NonAnimals)
```
• A complicated bit of reasoning about `owl:complementOf` captured by following KIF axiom.
```(=> (and (owl:complementOf ?c1 ?c2)
(rdfs:subClassOf ?c3 ?c1)
(rdfs:subClassOf ?c4 ?c2)
(owl:complementOf ?c4 ?c5))
(rdfs:subClassOf ?c3 c5))
```
• Inferring `owl:sameAs` relationships via `owl:FunctionalProperty` and `owl:InverseFunctionalProperty`. For example, the facts
```(rdf:type mother owl:FunctionalProperty)
(mother Joe Margaret)
(mother Joe Maggie)
```
imply the fact
```(owl:sameAs Margaret Maggie)
```
• If a class `A` is `owl:oneOf` a list of objects, say `X`, `Y`, and `Z`, then each of `X`, `Y`, and `Z` has `rdf:type` `A`.
• If an object is `rdf:type` an `owl:hasValue` `owl:Restriction`, then the object has the specified value for the specified property. For example, the facts
```(owl:onProperty RestrictionOrangeSkin skinColor)
(owl:hasValue RestrictionOrangeSkin Orange)
(rdf:type MrOompaLoompa RestrictionOrangeSkin)
```
imply the fact
```(skinColor MrOompaLoompa Orange)
```
• If an `owl:hasValue` `owl:Restriction` restricts a particular property to a particular value, and an object has that value for that property, then the object has the Restriction as a type. For example, the facts
```(owl:onProperty RestrictionOrangeSkin skinColor)
(owl:hasValue RestrictionOrangeSkin Orange)
(skinColor MrOompaLoompa Orange)
```
imply the fact
```(rdf:type MrOompaLoompa RestrictionOrangeskin)
```
• If an object is a `rdf:type` an `owl:allValuesFrom` `owl:Restriction`, and the object has values for the specified property, then the values are of the specified type. For example, the facts
```(owl:onProperty RestrictionCatChildren child)
(owl:allValuesFrom RestrictionCatChildren Cat)
(rdf:type Fluffy RestrictionCatChildren)
(child Fluffy Cupcake)
```
imply the fact
```(rdf:type Cupcake Cat)
```
• If an `owl:someValuesFrom` `owl:Restriction` restricts a particular property to a particular type, and if an object has some values of the specificied type for the specified property, then that object has the Restriction as a type. For example, the facts
```(owl:onProperty RestrictionIvyLeagueDegree degree)
(owl:someValuesFrom RestrictionIvyLeagueDegree IvyLeagueSchool)
(degree Mary Harvard)
(rdf:type Harvard IvyLeagueSchool)
```
imply the fact
```(rdf:type Mary RestrictionIvyLeagueDegree)
```
• If a property `Q` is `owl:inverseOf` of a property `P`, and `P` is an `owl:TransitiveProperty`, then `Q` is also an `owl:TransitiveProperty`.
• All of the elements of an `owl:AllDifferent` are `owl:differentFrom` each other.

OWL Classification inferences

• All classes are `rdfs:subClassOf` `owl:Thing`.
• If a class `A` is the `owl:unionOf` a list of classes, say `B`, `C`, and `D`, then each of `B`, `C`, and `D`, is `rdfs:subClassOf` `A`.
• If a class `A` is the `owl:intersectionOf` a list of classes, say `B`, `C`, and `D`, then `A` is `rdfs:subClassOf` of each of `B`, `C`, and `D`.
• If a class `A` is the `owl:intersectionOf` a list of constituent classes and a class `B` is the `owl:intersectionOf` a list of constituent classes, then `A` is a `rdfs:subClassOf` `B` if every constituent of `A` is a `rdfs:subClassOf` some constituent of `B`.
• If a class `A` is the `owl:unionOf` a list of constituent classes and a class `B` is the `owl:unionOf` a list of constituent classes, then `A` is a `rdfs:subClassOf` `B` if every constituent of `B` is a superclass of some constituent of `A`.
• If a class `A` is the `owl:intersectionOf` a list of constituent classes and a class `B` is the `owl:unionOf` a list of constituent classes, then `A` is a `rdfs:subClassOf` `B` if every constituent of `A` is a `rdfs:subClassOf` every constituent of `B`.
• An `owl:hasValue` `owl:Restriction` `A` subsumes another `owl:hasValue` restriction `B` if the property restricted by `B` is a `rdfs:subPropertyOf` the property restricted by `A`, and the restricted value is the same.
• An `owl:allValuesFrom` `owl:Restriction` `A` subsumes another `owl:allValuesFrom` restriction `B` if the property restricted by `B` is a `rdfs:subPropertyOf` the property restricted by `A`, and the restricted class of `B` is a `rdfs:subClassOf` the restricted class of `A`. Recall that any class is a subclass of itself, and any property is a subproperty of itself.
• If an object is a type of `owl:maxCardinality` `owl:Restriction` where the specified property is restricted to a maximum of 1 value, then all values of which the object has for the specified property are ```owl:sameAs one another. ```
• ``` An owl:minCardinality owl:Restriction A is disjoint from an owl:maxCardinality owl:Restriction B if the property restricted by A is a rdfs:subPropertyOf the property restricted by B, and the number of values specified by A is greater than the number of values specified by B. ```
• ``` An owl:minCardinality owl:Restriction A subsumes another owl:minCardinality restriction B if the property restricted by B is a rdfs:subPropertyOf the property restricted by A, and the number of values specified by A is less than or equal to the number of values specified by B. ```
• ``` An owl:maxCardinality owl:Restriction A subsumes another owl:maxCardinality restriction B if the property restricted by B is a rdfs:subPropertyOf the property restricted by A, and the number of values specified by A is greater than or equal to the number of values specified by B. ```
``` ```