Here is an example that should be sufficient to understand why OWL 2 Full is undecidable. This has something to do with Russel's paradox.
In OWL Full, you can define a class that has itself as an instance:
:IsInstanceOfItself a :IsIntanceOfItself .
This is also possible in RDF/RDFS but it does not make the logic undecidable. What leads to undecidability is the fact that you can define classes that are paradoxical in OWL 2 Full. You can define the class of classes that have themselves as instances:
:HaveThemselvesAsInstance
rdfs:subClassOf [
a owl:Restriction;
owl:onProperty rdf:type;
owl:hasSelf true
] .
Then you can define the classes that do not have themselves as instances:
:DoNotHaveThemselvesAsInstance
owl:equivalentClass [ owl:complementOf :HaveThemselvesAsInstance ] .
Now, we can ask the question: is :DoNotHaveThemselvesAsInstance
an instance of itself? Assume that it is the case. Then:
:DoNotHaveThemselvesAsInstance a :DoNotHaveThemselvesAsInstance .
is true. Therefore, :DoNotHaveThemselvesAsInstance
abides by the definition that it's in a class where there is no relationship with itself with the rdf:type
property. So the assumption is wrong. Therefore :DoNotHaveThemselvesAsInstance
must be in the complement of those classes that have rdf:type
with themselves. So it must be an instance of :DoNotHaveThemselvesAsInstance
. So the assumed relationship above should hold. Back to the initial step. Consequently, there cannot be any model for any ontology that defines the class defined above. So there cannot be a class of classes that do not have themselves as instance. So perhaps, all classes have themselves as instances, perhaps? But there are models of ontologies where some classes are not instances of themselves. So... OWL 2 Full is really fucked up, isn't it?