comments on Euler owl rules

Comments on owl-rules.n3,v 1.148 (149?)

I have taken the liberty of reordering the rules.

I am completely mystified as to what this is supposed to do.  It is missing
huge parts of the OWL semantics, including the comprehension principles.
It has many errors.

Comments on specific rules below.


	<> <#rcsid> "$Id: owl-rules.n3,v 1.148 2003/05/31 10:14:45 amdus Exp $".
	
	@prefix log: <http://www.w3.org/2000/10/swap/log#>.
	@prefix math: <http://www.w3.org/2000/10/swap/math#>.
	@prefix owl: <http://www.w3.org/2002/07/owl#>.
	@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
	@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
	@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
	@prefix : <owl-rules#>.
	@prefix neg: <negation#>.
	
	### Web Ontology Language OWL
	
	owl:Class rdfs:subClassOf rdfs:Class.
	owl:Restriction rdfs:subClassOf owl:Class.
	owl:DataRange rdfs:subclassOf rdfs:Literal.
WRONG	owl:DeprecatedClass rdfs:subclassOf owl:Class.
	#	rdfs:subclassOf is not defined
	#	owl:DeprecatedClass is not specifed as a subclass of owl:Class.



WRONG	owl:Property rdfs:subClassOf rdf:Property.
	#	owl:Property is not defined in OWL
WRONG	owl:OntologyProperty rdfs:subClassOf owl:Property.
	#	owl:Property is not defined in OWL
WRONG	owl:AnnotationProperty rdfs:subClassOf owl:Property.
	#	owl:Property is not defined in OWL
WRONG	owl:ObjectProperty rdfs:subClassOf owl:Property.
	#	owl:Property is not defined in OWL
WRONG	owl:DatatypeProperty rdfs:subClassOf owl:Property.
	#	owl:Property is not defined in OWL
??	owl:FunctionalProperty rdfs:subClassOf owl:ObjectProperty.
	#	functional properties can be datatype properties
	owl:InverseFunctionalProperty rdfs:subClassOf owl:ObjectProperty.
	owl:SymmetricProperty rdfs:subClassOf owl:ObjectProperty.
	owl:TransitiveProperty rdfs:subClassOf owl:ObjectProperty.
WRONG	owl:DeprecatedProperty rdfs:subClassOf owl:Property.
	#		owl:Property is not defined in OWL

??	owl:Ontology a owl:Class.
	#	owl:Ontology is not specified as an owl:Class
	
	owl:imports rdfs:domain owl:Ontology; rdfs:range owl:Ontology;  a owl:OntologyProperty.
??	owl:incompatibleWith rdfs:domain owl:Ontology; rdfs:range owl:Ontology; rdfs:subPropertyOf owl:priorVersion.
	#	owl:backwardCompatibleWith is an owl:OntologyProperty
	owl:priorVersion rdfs:domain owl:Ontology; rdfs:range owl:Ontology; a owl:OntologyProperty.
WRONG	owl:backwardCompatibleWith rdfs:domain owl:Ontology; rdfs:range owl:Ontology; rdfs:subPropertyOf owl:priorVersion.
	#	owl:backwardCompatibleWith is not a subproperty of owl:priorVersion
	#	owl:backwardCompatibleWith is an owl:OntologyProperty

WRONG	owl:versionInfo rdfs:domain rdfs:Resource; rdfs:range rdfs:Resource; a owl:OntologyProperty.
	#	owl:versionInfo is an annotation property
	rdfs:comment a owl:AnnotationProperty.
	rdfs:label a owl:AnnotationProperty.
	rdfs:seeAlso a owl:AnnotationProperty.
	#	missing rdfs:isDefinedBy

??	owl:equivalentClass rdfs:domain rdfs:Class; rdfs:range rdfs:Class; rdfs:subPropertyOf rdfs:subClassOf; a owl:SymmetricProperty; a owl:TransitiveProperty.
	#	owl:complementOf is not specified as an object property
	#	domain and range of owl:equivalentClass can be determined to be owl:Class
??	owl:disjointWith rdfs:domain rdfs:Class; rdfs:range rdfs:Class; a owl:SymmetricProperty.
	#	owl:complementOf is not specified as an object property

??	owl:complementOf rdfs:domain rdfs:Class; rdfs:range rdfs:Class; a owl:SymmetricProperty.
	#	owl:complementOf is not specified as an object property
WRONG	owl:intersectionOf rdfs:domain rdfs:Class; rdfs:range rdf:List; a owl:InverseFunctionalProperty.
	#	owl:intersectionOf is not inverse functional
WRONG	owl:unionOf rdfs:domain rdfs:Class; rdfs:range rdf:List; a owl:InverseFunctionalProperty.
	#	owl:unionOf is not inverse functional
WRONG	owl:oneOf rdfs:domain rdfs:Class; rdfs:range rdf:List; a owl:InverseFunctionalProperty.
	#	owl:oneOf is not inverse functional

WRONG	owl:onProperty rdfs:domain owl:Restriction; rdfs:range owl:Property.
	# the domain and range of owl:onProperty are unspecified
WRONG	owl:allValuesFrom rdfs:domain owl:Restriction; rdfs:range rdfs:Class.
	# the domain and range of owl:allValuesFrom are unspecified
WRONG	owl:someValuesFrom rdfs:domain owl:Restriction; rdfs:range rdfs:Class.
	# the domain and range of owl:someValuesFrom are unspecified
WRONG	owl:hasValue rdfs:domain owl:Restriction; rdfs:range rdfs:Resource.
	# the domain of owl:hasValue is unspecified
WRONG	owl:cardinality rdfs:domain owl:Restriction; rdfs:range xsd:nonNegativeInteger.
	# the domain and range of owl:cardinality are unspecified
WRONG	owl:maxCardinality rdfs:domain owl:Restriction; rdfs:range xsd:nonNegativeInteger.
	# the domain and range of owl:cardinality are unspecified
WRONG	owl:minCardinality rdfs:domain owl:Restriction; rdfs:range xsd:nonNegativeInteger.
	# the domain and range of owl:cardinality are unspecified

WRONG	owl:equivalentProperty rdfs:domain owl:Property; rdfs:range owl:Property; rdfs:subPropertyOf rdfs:subPropertyOf; a owl:SymmetricProperty; a owl:TransitiveProperty.
	#	owl:Property is not defined in OWL
	#	owl:equivalentProperty is not specified as an object property

??	owl:inverseOf rdfs:domain owl:Property; rdfs:range owl:Property; a owl:SymmetricProperty.
	#	owl:inverseOf is not specified as an owl:ObjectProperty

#	owl:differentFrom rdfs:domain rdfs:Resource; rdfs:range rdfs:Resource; a owl:SymmetricProperty.
	#	owl:differentFrom is not specified as an object property
	owl:distinctMembers rdfs:domain rdfs:Resource; rdfs:range rdf:List.

WRONG	rdf:first a owl:FunctionalProperty.
	#	rdf:first is not a functional property
	rdf:rest a owl:FunctionalProperty.
	#	rdf:rest is not a functional property

??	owl:Thing rdfs:subClassOf rdfs:Resource.
	#	owl:thing is not specified as an owl:Class
	owl:Nothing a owl:Class; owl:oneOf rdf:nil.


	### inference rules for Web Ontology Language OWL
	
	{: rdfs:fyi :rule4p1. ?P owl:equivalentProperty ?R. ?S ?P ?O} => {?S ?R ?O}.
	{: rdfs:fyi :rule4p2. ?P owl:equivalentProperty ?R. ?S ?R ?O} => {?S ?P ?O}.

	{: rdfs:fyi :rule5e1. ?X owl:sameAs ?Z. ?X ?P ?Y} => {?Z ?P ?Y}.
	{: rdfs:fyi :rule5e2. ?P owl:sameAs ?Q. ?X ?P ?Y} => {?X ?Q ?Y}.
	{: rdfs:fyi :rule5e3. ?Y owl:sameAs ?Z. ?X ?P ?Y} => {?X ?P ?Z}.

??	{: rdfs:fyi :rule1i1. ?P owl:inverseOf ?Q. ?S ?P ?O} => {?O ?Q ?S}.
	#	missing ?P rdf:type owl:ObjectProperty condition
??	{: rdfs:fyi :rule1s1. ?P a owl:SymmetricProperty. ?S ?P ?O} => {?O ?P ?S}.
	#	missing ?P rdf:type owl:ObjectProperty condition
??	{: rdfs:fyi :rule2t1. ?P a owl:TransitiveProperty. ?X ?P ?O. ?S ?P ?X} => {?S ?P ?O}.
	#	missing ?P rdf:type owl:ObjectProperty condition
??	{: rdfs:fyi :rule6e2. ?P a owl:FunctionalProperty. ?S ?P ?X. ?S ?P ?Y} => {?X owl:sameAs ?Y}.
	#	missing ?P rdf:type owl:ObjectProperty or owl:DatatypeProperty condition
??	{: rdfs:fyi :rule6e3. ?P a owl:InverseFunctionalProperty. ?X ?P ?O. ?Y ?P ?O} => {?X owl:sameAs ?Y}.
	#	missing ?P rdf:type owl:ObjectProperty condition

	{: rdfs:fyi :rule3r1. ?R owl:onProperty ?P; owl:hasValue ?Y. ?X a ?R} => {?X ?P ?Y}.

	
WRONG	{: rdfs:fyi :rule6e4. ?R owl:onProperty ?P. ?R owl:maxCardinality "1". ?S a ?R. ?S ?P ?X. ?S ?P ?Y} => {?X owl:sameAs ?Y}.
	#	needs to be the integer 1, not the literal "1"

??	{: rdfs:fyi :rule7c1. ?A rdfs:subClassOf ?B. ?B rdfs:subClassOf ?A} => {?A owl:equivalentClass ?B}.
	#	missing ?A rdf:type owl:Class condition
??	{: rdfs:fyi :rule7c2. ?A owl:complementOf ?C. ?B owl:complementOf ?C} => {?A owl:equivalentClass ?B}.
	#	missing ?A rdf:type owl:Class condition
	{: rdfs:fyi :rule7c3. ?B owl:onProperty ?P; owl:cardinality ?M. ?A owl:onProperty ?P; owl:cardinality ?M} => {?A owl:equivalentClass ?B}.
??	{: rdfs:fyi :rule7c4. ?B owl:intersectionOf ?L. ?L rdf:first ?A; rdf:rest rdf:nil} => {?A owl:equivalentClass ?B}.
	#	missing ?L rdf:type owl:Class condition

??	{: rdfs:fyi :rule7p1. ?A rdfs:subPropertyOf ?B. ?B rdfs:subPropertyOf ?A} => {?A owl:equivalentProperty ?B}.
	#	missing ?L rdf:type owl:ObjectProperty or owl:DatatypeProperty condition
??	{: rdfs:fyi :rule7p2. ?A owl:inverseOf ?C. ?B owl:inverseOf ?C} => {?A owl:equivalentProperty ?B}.
	#	missing ?L rdf:type owl:ObjectProperty condition
WRONG	{: rdfs:fyi :rule7p3. ?R owl:onProperty ?A; owl:hasValue ?V. 
			      ?T owl:onProperty ?B; owl:hasValue ?V. 
			      ?A rdfs:domain ?D; a owl:FunctionalProperty. 
			      ?B rdfs:domain ?D; a owl:FunctionalProperty. 
	 		      ?D rdfs:subClassOf ?R, ?T} => {?A owl:equivalentProperty ?B}.
	#	this does not follow - ?A could be empty and ?B not

	{: rdfs:fyi :rule7d1. ?L rdf:first ?X; rdf:rest ?M. ?M :item ?Y. ?A owl:distinctMembers ?L; a owl:AllDifferent} => {?X owl:differentFrom ?Y}.
WRONG	{: rdfs:fyi :rule7j1. ?L rdf:first ?X; rdf:rest ?M. ?M :item ?Y. ?A owl:distinctMembers ?L; a owl:AllDisjoint} => {?X owl:disjointWith ?Y}.
	#	owl:AllDisjoint not defined

	{: rdfs:fyi :rule8s1. ?B owl:intersectionOf ?Y. ?A owl:intersectionOf ?X. ?X :includes ?Y} => {?A rdfs:subClassOf ?B}.
	{: rdfs:fyi :rule8s2. ?B owl:unionOf ?Y. ?A owl:unionOf ?X. ?Y :includes ?X} => {?A rdfs:subClassOf ?B}.
	{: rdfs:fyi :rule8s3. ?B owl:oneOf ?Y. ?A owl:oneOf ?X. ?Y :includes ?X} => {?A rdfs:subClassOf ?B}.
	{: rdfs:fyi :rule8s4. ?A owl:intersectionOf ?X. ?X :item ?B} => {?A rdfs:subClassOf ?B}.
	{: rdfs:fyi :rule8s5. ?B owl:unionOf ?Y. ?Y :item ?A} => {?A rdfs:subClassOf ?B}.
	{: rdfs:fyi :rule8s6. ?X rdf:first ?A. ?C owl:intersectionOf ?X. ?R rdfs:subClassOf ?C} => {?R rdfs:subClassOf ?A}.
	{: rdfs:fyi :rule8s7. ?A owl:onProperty rdf:type; owl:hasValue ?B} => {?A rdfs:subClassOf ?B}.

	{: rdfs:fyi :rule9o1. ?C owl:oneOf ?X. ?X :item ?Y} => {?Y a ?C}.
	{: rdfs:fyi :rule9i2. ?C owl:intersectionOf ?X. ?Y :inAllOf ?X} => {?Y a ?C}.
	{: rdfs:fyi :rule9u1. ?C owl:unionOf ?X. ?Y :inSomeOf ?X} => {?Y a ?C}.
	{: rdfs:fyi :rule9r1. ?R owl:onProperty ?P; owl:allValuesFrom ?C. ?S a ?R. ?S ?P ?X} => {?X a ?C}.
	{: rdfs:fyi :rule9r2. ?R owl:onProperty ?P; owl:hasValue ?Y. ?X ?P ?Y} => {?X a ?R}.
WRONG	{: rdfs:fyi :rule9r3. ?R owl:onProperty ?P; owl:allValuesFrom ?C} => {?P a owl:ObjectProperty; rdfs:range ?C}.
	#	the range of ?P does not need to be ?C
	#	?P might be an owl:DatatypeProperty
	{: rdfs:fyi :rule9f1. ?P owl:inverseOf ?Q. ?Q a owl:FunctionalProperty} => {?P a owl:InverseFunctionalProperty}.
	{: rdfs:fyi :rule9f2. ?C owl:oneOf ?L. ?L rdf:first ?X; rdf:rest rdf:nil. ?P rdfs:range ?C} => {?P a owl:FunctionalProperty}.
	{: rdfs:fyi :rule9i1. ?P owl:inverseOf ?Q. ?Q a owl:InverseFunctionalProperty} => {?P a owl:FunctionalProperty}.
	{: rdfs:fyi :rule9i2. ?C owl:oneOf ?L. ?L rdf:first ?X; rdf:rest rdf:nil. ?P rdfs:domain ?C} => {?P a owl:InverseFunctionalProperty}.
	{: rdfs:fyi :rule9d1. ?P rdfs:domain ?C. ?P owl:inverseOf ?Q} => {?Q rdfs:range ?C}.
	{: rdfs:fyi :rule9d2. ?P rdfs:range ?C. ?P owl:inverseOf ?Q} => {?Q rdfs:domain ?C}.
	
WRONG	{: rdfs:fyi :rule10c1. ?R owl:onProperty ?P; owl:minCardinality ?M; owl:maxCardinality ?M} => {?R owl:cardinality ?M}.
	#	there no sufficient conditions for owl:cardinalty
WRONG	{: rdfs:fyi :rule10c3. ?R owl:onProperty ?P; owl:cardinality ?M} => {?R owl:minCardinality ?M}.
	#	there no sufficient conditions for owl:minCardinalty
WRONG	{: rdfs:fyi :rule10c4. ?R owl:onProperty ?P; owl:cardinality ?M} => {?R owl:maxCardinality ?M}.
	#	there no sufficient conditions for owl:maxCardinalty
	{: rdfs:fyi :rule10a1. ?L rdf:rest ?M. ?A owl:distinctMembers ?L} => {?A owl:distinctMembers ?M}.
	
	### inconsistency detections @@
	
??	{: rdfs:fyi :rule20n0. ?X a owl:Nothing} => {?X log:inconsistentWith owl:Nothing}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20n1. rdf:nil rdf:first ?X} => {?X log:inconsistentWith rdf:nil}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20n2. rdf:nil rdf:rest ?X} => {?X log:inconsistentWith rdf:nil}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20c1. ?Y owl:complementOf ?Z. ?X a ?Y, ?Z} => {?X log:inconsistentWith owl:complementOf}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20c2. ?Y owl:complementOf ?X; owl:equivalentClass ?X} => {?X log:inconsistentWith owl:complementOf}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20d0. ?Y owl:disjointWith ?X; owl:equivalentClass ?X} => {?X log:inconsistentWith owl:disjointWith}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20d1. ?Y owl:disjointWith ?Z. ?X a ?Y, ?Z} => {?X log:inconsistentWith owl:disjointWith}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20u1. ?P a owl:FunctionalProperty. ?S ?P ?X, ?Y. ?X owl:differentFrom ?Y} => {?X log:inconsistentWith owl:FunctionalProperty}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20a1. ?P a owl:InverseFunctionalProperty. ?X ?P ?O. ?Y ?P ?O. ?X owl:differentFrom ?Y} => {?X log:inconsistentWith owl:InverseFunctionalProperty}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20o0. ?C owl:oneOf ?L. ?P rdfs:domain ?C. ?X ?P ?O. ?L neg:item ?X} => {?X log:inconsistentWith owl:oneOf}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20o1. ?C owl:oneOf ?L. ?P rdfs:range ?C. ?S ?P ?X. ?L neg:item ?X} => {?X log:inconsistentWith owl:oneOf}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20o2. ?C owl:oneOf ?L. ?X a ?C. ?L neg:item ?X} => {?X log:inconsistentWith owl:oneOf}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20r0. ?R owl:onProperty ?P; owl:maxCardinality ?M. ?M math:equalTo 0. ?X a ?R; ?P ?Y} => {?X log:inconsistentWith owl:maxCardinality}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20r1. ?R owl:onProperty ?P; owl:maxCardinality ?M. ?M math:equalTo 1. ?X a ?R; ?P ?Y1, ?Y2. ?Y2 owl:differentFrom ?Y1} => {?X log:inconsistentWith owl:maxCardinality}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20r2. ?R owl:onProperty ?P; owl:maxCardinality ?M. ?M math:equalTo 2. ?X a ?R; ?P ?Y1, ?Y2, ?Y3. ?Y2 owl:differentFrom ?Y1. ?Y3 owl:differentFrom ?Y1, ?Y2} => {?X log:inconsistentWith owl:maxCardinality}.
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20q0. ?R owl:onProperty ?P; owl:maxCardinalityQ ?M; owl:hasClassQ ?A. ?M math:equalTo 0. ?X a ?R; ?P ?Y. ?Y a ?A} => {?X log:inconsistentWith owl:maxCardinalityQ}.
	#	owl:hasClassQ is not defined in OWL
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20q1. ?R owl:onProperty ?P; owl:maxCardinalityQ ?M; owl:hasClassQ ?A. ?M math:equalTo 1. ?X a ?R; ?P ?Y1, ?Y2. ?Y2 owl:differentFrom ?Y1. ?Y1 a ?A. ?Y2 a ?A} => {?X log:inconsistentWith owl:maxCardinalityQ}.
	#	owl:hasClassQ is not defined in OWL
	#	log:inconsistentWith is not defined in OWL
??	{: rdfs:fyi :rule20q2. ?R owl:onProperty ?P; owl:maxCardinalityQ ?M; owl:hasClassQ ?A. ?M math:equalTo 2. ?X a ?R; ?P ?Y1, ?Y2, ?Y3. ?Y2 owl:differentFrom ?Y1. ?Y3 owl:differentFrom ?Y1, ?Y2. ?Y1 a ?A. ?Y2 a ?A. ?Y3 a ?A} => {?X log:inconsistentWith owl:maxCardinalityQ}.
	#	owl:hasClassQ is not defined in OWL
	#	log:inconsistentWith is not defined in OWL

	
	### support @@
	
	{: rdfs:fyi :rule40i1. ?S rdf:first ?X} => {?S :item ?X}.
	{: rdfs:fyi :rule40i2. ?S rdf:rest ?B. ?B :item ?X} => {?S :item ?X}.
	{: rdfs:fyi :rule40n1} => {rdf:nil neg:item ?X}.
	{: rdfs:fyi :rule40n2. ?S rdf:first ?A. ?A owl:differentFrom ?X. ?S rdf:rest ?B. ?B neg:item ?X} => {?S neg:item ?X}.
	
	{: rdfs:fyi :rule41i1} => {?X :includes rdf:nil}.
	{: rdfs:fyi :rule41i2. ?S rdf:first ?A. ?X :item ?A. ?S rdf:rest ?B. ?X :includes ?B} => {?X :includes ?S}.
	{: rdfs:fyi :rule41o1. ?X rdf:first ?A. ?S :item ?A. ?X rdf:rest ?B. ?B :zeroItemsIn ?S} => {?X :oneItemIn ?S}.
	{: rdfs:fyi :rule41o2. ?X rdf:first ?A. ?S neg:item ?A. ?X rdf:rest ?B. ?B :oneItemIn ?S} => {?X :oneItemIn ?S}.
	{: rdfs:fyi :rule41z1} => {rdf:nil :zeroItemsIn ?S}.
	{: rdfs:fyi :rule41z2. ?X rdf:first ?A. ?S neg:item ?A. ?X rdf:rest ?B. ?B :zeroItemsIn ?S} => {?X :zeroItemsIn ?S}.
	
	{: rdfs:fyi :rule42a1} => {?X :inAllOf rdf:nil}.
	{: rdfs:fyi :rule42a2. ?S rdf:first ?A. ?X a ?A. ?S rdf:rest ?B. ?X :inAllOf ?B} => {?X :inAllOf ?S}.
	{: rdfs:fyi :rule42s1. ?S rdf:first ?A. ?X a ?A} => {?X :inSomeOf ?S}.
	{: rdfs:fyi :rule42s2. ?S rdf:rest ?B. ?X :inSomeOf ?B} => {?X :inSomeOf ?S}.
	
	{: rdfs:fyi :rule60n1. ?A owl:complementOf ?B. ?C a ?A} => {?C neg:type ?B}.
	{: rdfs:fyi :rule60n2. ?A owl:oneOf ?L. ?L neg:item ?C} => {?C neg:type ?A}.
	{: rdfs:fyi :rule60n3. ?A owl:complementOf ?B. ?C neg:type ?A} => {?C a ?B}.
	
??	rdfs:Class rdf:type _:i .
??	_:i owl:intersectionOf _:l .
??	_:l rdf:first rdfs:Class .
??	_:l rdf:rest rdf:nil .
	#	this doesn't belong in the OWL rules

Received on Thursday, 5 June 2003 22:00:52 UTC