- From: Jos De_Roo <jos.deroo@agfa.com>
- Date: Fri, 6 Jun 2003 12:44:40 +0200
- To: pfps@research.bell-labs.com
- Cc: www-webont-wg@w3.org
Thanks Peter for those comments;
I've tried to resolve some of them in
http://www.agfa.com/w3c/euler/owl-rules
$Id: owl-rules.n3,v 1.151 2003/06/06 09:27:32 amdus Exp $
We also tested with those, and with the current set
there is a status quo except for
http://www.w3.org/2002/03owlt/equivalentProperty/Manifest005
which we now can't prove anymore (we dropped :rule7p3).
Remark that owl-rules is used in conjunction with
http://www.agfa.com/w3c/euler/rdfs-rules
As a whole this stuff is indeed not complete.
--
Jos De Roo, AGFA http://www.agfa.com/w3c/jdroo/
"Peter F.
Patel-Schneider" To: Jos De_Roo/AMDUS/MOR/Agfa-NV/BE/BAYER@AGFA
<pfps@research.bell cc: www-webont-wg@w3.org
-labs.com> Subject: comments on Euler owl rules
2003-06-06 04:00 AM
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 Friday, 6 June 2003 06:44:48 UTC