Message 12331 of the SUO list Subject: Re: W3C approves RDF and OWL as recommendations (original subject header for the discussion but inappropriate here) Date: Wed, 18 Feb 2004 18:24:30 +1000 From: Philippe Martin In-reply-to: msg12321 by Adam Pease (in answer to msg12303 by Philippe Martin) Follow-up: msg12337 by Adam Pease (answered in msg12340 by Philippe Martin) > a DL should support to a certain degree this connection between > relational concepts and their respective relations ... > Parent := (some isParentOf) should suffice for a DL inference engine Indeed, representing the "connection" is permitted to a certain degree. Now here is my solution for the "generation" of the relations from the relational concepts. For readability reasons, I slightly changed the example I gave in my previous e-mails and the construct is now called relationalConceptSignature instead of roleTypeDomain. The initial of each relation type name is in lowercase. The initial of each concept type name is in uppercase. My motivation is to permit the users to (only) write Father (Animal,Male) < Parent ; in the FT notation, or (isSubclassOf Father Parent) (relationalConceptSignature Father Animal Male) in KIF, and I want these formulas to be equivalent to (isSubclassOf Father Parent) (BinaryRelation father) (domain father 1 Animal) (domain father 2 Male) (=> (father ?a ?m) (Father ?m)) (=> (Father ?m) (exists (?a ?m) (and (Animal ?a) (Male ?m) (father ?a ?m)))) Furthermore, if Parent is itself a relationalConcept with an associated relation (e.g. in FT: Parent (Animal,Animal) < Animal ;), I also want the following to be generated: (isSubrelationOf father parent) Thus, the users do not have to duplicate many relational concepts into the relation type hierarchy, they only update the concept type hierarchy. I am hoping that the next three definitions permit this. Corrections are welcome. I am using (holds ?rel ?a ?m) and (holds ?t1 ?a) instead of (?rel ?a ?m) and (?t1 ?a) -- this last formula being also equivalent to (instanceOf ?a ?t1) -- because not all versions of KIF accept the second syntactic form. However, in the definition at the end of this file, I have to use the form (?rel ?a) because then ?rel refers to a function. (defrelation relationalConceptSignature (?roleType ?t1 ?t2) := (exists ((?rel BinaryRelation)) (and (= ?rel (findOrGenerateRelationFor ?roleType)) (domain ?rel 1 ?t1) (domain ?rel 2 ?t2) (=> (holds ?rel ?a ?m) (holds ?roleType ?m)) (=> (holds ?roleType ?m) (exists (?a ?m) (and (holds ?t1 ?a) (holds ?t2 ?m) (holds ?rel ?a ?m)))) (=> (and (isSubclassOf ?roleType ?sup) (relationFor ?sup ?supRel)) (isSubrelationOf ?rel ?supRel)) ))) (defunction findOrGenerateRelationFor (?roleType) :-> ?rel :=> (exists ((?rel BinaryRelation)) (= ?rel (denotation (cons (lowercase (car (name ?roleType))) (cdr (name ?roleType))))))) (defrelation relationFor (?roleType ?rel) := (and (= ?rel (denotation (cons (lowercase (car (name ?roleType))) (cdr (name ?roleType))))) (BinaryRelation ?rel))) The last two definitions re-use the KIF functions called "name" (which returns an identifier of the given object) and "denotation" (which returns the object from the given identifier) and was inspired by one of the examples in Section 10.3 of Standford's KIF manual at http://logic.stanford.edu/kif/dpans.html#10.3 I'd be surprised if these definitions were entirely correct and achieved the intended effects but they give the idea of the approach. The relation father is actually functional. Thus, I want the users to be able to write Father (Animal -> Male) < Parent ; in the FT notation, or (isSubclassOf Father Parent) (functionalConceptSignature Father Animal Male) in KIF, and I want these formulas to be equivalent to (isSubclassOf Father Parent) (UnaryFunction father) (domain father 1 Animal) (range father Male) (=> (= ?m (father ?a)) (Father ?m)) (=> (Father ?m) (exists (?a ?m) (and (Animal ?a) (Male ?m) (= ?m (father ?a))))) Hence, the following definition: (defrelation functionalConceptSignature (?roleType ?t1 ?t2) := (exists ((?rel UnaryFunction)) (and (= ?rel (findOrGenerateRelationFor ?roleType)) (domain ?rel 1 ?t1) (range ?rel ?t2) (=> (= ?m (?rel ?a)) (holds ?roleType ?m)) (=> (holds ?roleType ?m) (exists (?a ?m) (and (holds ?t1 ?a) (holds ?t2 ?m) (= ?m (?rel ?a))))) (=> (and (isSubclassOf ?roleType ?sup) (relationFor ?sup ?supRel)) (isSubrelationOf ?rel ?supRel)) ))) Philippe