# Re: Combined Inverse Functional Properties

From: Rogier Brussee <rogier.brussee@gmail.com>
Date: Fri, 18 Feb 2005 14:42:23 +0100
Message-ID: <7af5e1b405021805421956d4bb@mail.gmail.com>
To: "jos.deroo@agfa.com" <jos.deroo@agfa.com>
Cc: Dan Brickley <danbri@w3.org>, Henry Story <henry.story@bblfish.net>, SWIG <semantic-web@w3.org>, semantic-web-request@w3.org, Yuzhong Qu <yzqu@seu.edu.cn>
```
Thank you very much for trying this!  Your rules are much cleaner than
mine. However it seems that I have not been clear in my intentions.

what I proposed is that if we have rules that given

:p :productProperty (r1 r2 r3).
:x :r1 :a;
:r2 :b;
:r3 :c.

we infer

:x :p (:a :b :c).

Then if

:x :p (:a :b :c).
:y :p (:a :b :c).
:p a owl:InverseFunctionalProperty.

the standard owl axioms (if I understand them correctly)  would imply that

:x owl:sameAs :y.

Seeing your rules as an example, perhaps the following rules work. At
least they are much simpler than my original ones (sorry, still no
rule engine available to test it out myself)

# the always true predicate
{} => {?X :true ?Y}.

:true :productProperty rdf:nil.

{
?P :productProperty ?L.
?L rdf:first ?Q.
?L rdf:rest ?M.
?R :productProperty ?M.
?X ?Q ?A.
?X ?R ?B
}
=>
{?X ?P (?A ?B)}.

On Thu, 17 Feb 2005 16:08:34 +0100, jos.deroo@agfa.com
<jos.deroo@agfa.com> wrote:
> is indeed better with :productProperty and owl:InverseFunctionalProperty
> have done test case
>
> data   http://eulersharp.sourceforge.net/2004/04test/henry.n3
> rules  http://eulersharp.sourceforge.net/2004/04test/rogier.n3
> query  http://eulersharp.sourceforge.net/2004/04test/sameAsQ.n3
> answer http://eulersharp.sourceforge.net/2004/04test/sameAsE.n3
>
> it was tested with command line
> .euler --nope --think
> http://eulersharp.sourceforge.net/2004/04test/henry.n3
> http://eulersharp.sourceforge.net/2004/04test/rogier.n3 --query
> http://eulersharp.sourceforge.net/2004/04test/sameAsQ.n3
>
> and also via getting
> http://wopeg.he.agfa.be/.euler+--nope+--think+http%3A%2F%2Feulersharp.sourceforge.net%2F2004%2F04test%2Fhenry.n3+http%3A%2F%2Feulersharp.sourceforge.net%2F2004%2F04test%2Frogier.n3+--query+http%3A%2F%2Feulersharp.sourceforge.net%2F2004%2F04test%2FsameAsQ.n3
>
> from primitive service
> java -Xmx800m -Dprocess.cwm="python /cwm-1.0.0/swap/cwm.py"
> -Dprocess.euler="java -Xmx800m euler.EulerRunner" -Dprocess.ttl=10000 R -p
> 80 -debug
>
> (version
> http://sourceforge.net/project/showfiles.php?group_id=77046&package_id=77935&release_id=305730
> help http://eulersharp.sourceforge.net/2004/01swap/Euler.txt)
>
>
> --
> Jos De Roo, AGFA http://www.agfa.com/w3c/jdroo/
>
> Rogier Brussee <rogier.brussee@gmail.com>
> Sent by: semantic-web-request@w3.org
> 16/02/2005 16:13
> Please respond to Rogier Brussee
>
>        To:     SWIG <semantic-web@w3.org>
>        cc:     Henry Story <henry.story@bblfish.net>, Jos
> De_Roo/AMDUS/MOR/Agfa-NV/BE/BAYER@AGFA, Dan Brickley <danbri@w3.org>,
> Yuzhong Qu <yzqu@seu.edu.cn>
>        Subject:        Re: Combined Inverse Functional Properties
>
> On Wed, 16 Feb 2005 11:22:57 +0800, Yuzhong Qu <yzqu@seu.edu.cn> wrote:
> > It seems to me that:
> >
> > what CIFP means is very close to that intersectionOf(r1, r2, ..., rn) is
> a reverse functional property.
> >
> [snip]
> Except that it is not so clear what the domain (i.e. "outcome")  of :cifp
> is.
>
> > > > I did just a 5 min test with Cwm and Euler :)
> > > >
> > > > given data
> > > >
> > > > :a :r1 :b.
> > > > :a :r2 :c.
> > > > :g :r1 :b.
> > > > :g :r2 :c.
> > > > :p :cifp (:r1 :r2).
> > >
>
> It seems to me that the "combined inversefunctional property" is not a
> primitive notion. It seems more natural and general to have a notion
> of productProperty (or combined property) which can in particular  be
> inverse functional. Thus I would replace  the last sentence by :
>
> :p :productProperty (:r1:r2).
> :p a owl:InverseFunctionalProperty.
>
> :productProperty should model a list of simulaneous properties, and it
> seems easiest if it takes values in a list. To be of any use as an
> inverse functional property we have to assume that two lists are
> owl:sameAs if their entries are owl:sameAs and have the same order,
> just as Yuzhong Qu seems to suggest.
>
> We can define some rules capturing the notion of :productProperty.
> I have no rule engine around here but does something like this work ?
>
> :productProperty a owl:InverseFunctionalProperty;
>               rdfs:domain rdf:Property.
>
> # bottom of recursion
> {
> ?p :productProperty ?L.
> ?L rdf:first ?q.
> ?L rdf:rest rdf:nil.
> }
> =>
> {
>       {?x ?q ?a} <=> {?x ?p ?A. ?A rdf:first ?a. ?A rdf:rest rdf:nil}
> } .
>
> #recursion
> {
> ?p :productProperty ?L.
> ?L rdf:first ?q.
> ?L rdf:rest ?M.
> ?r :productProperty ?M}
> =>
> {
>           {?x ?q ?a. ?x ?r ?B} <=> {?x ?p ?A. ?A rdf:first ?a. ?A
> rdf:rest ?B}
> }.
>
> # ?q :composition (?p rdf:first). ?r :composition (?p rdf:rest). Sigh
>
> > > >
> > > > and some rules capturing only cases for 1, 2 and 3 cifp properties
> > > >
> > > > {?C :cifp ?L.
> > > >  ?L rdf:first ?P;
> > > >     rdf:rest rdf:nil.
> > > >  ?A ?P ?X.
> > > >  ?B ?P ?X}
> > > >  =>
> > > > {?A owl:sameAs ?B}.
> > > >
> > > > {?C :cifp ?L.
> > > >  ?L rdf:first ?P;
> > > >     rdf:rest ?M.
> > > >  ?M rdf:first ?Q;
> > > >     rdf:rest rdf:nil.
> > > >  ?A ?P ?X;
> > > >     ?Q ?Y.
> > > >  ?B ?P ?X;
> > > >     ?Q ?Y}
> > > >  =>
> > > > {?A owl:sameAs ?B}.
> > > >
> > > > {?C :cifp ?L.
> > > >  ?L rdf:first ?P;
> > > >     rdf:rest ?M.
> > > >  ?M rdf:first ?Q;
> > > >     rdf:rest ?N.
> > > >  ?N rdf:first ?R;
> > > >     rdf:rest rdf:nil.
> > > >  ?A ?P ?X;
> > > >     ?Q ?Y;
> > > >     ?R ?Z.
> > > >  ?B ?P ?X;
> > > >     ?Q ?Y;
> > > >     ?R ?Z}
> > > >  =>
> > > > {?A owl:sameAs ?B}.
> > > >
> > > >
> > > > the N3QL query
> > > >
> > > > [] q:select {?X owl:sameAs ?Y}; q:where {?X owl:sameAs ?Y}.
> > > >
> > > > gave us
> > > >
> > > > :a owl:sameAs :a.
> > > > :a owl:sameAs :g.
> > > > :g owl:sameAs :a.
> > > > :g owl:sameAs :g.
> > > >
>
> So nice.
>
> > >
> > >
> > >
> > >
>
>
```
Received on Friday, 18 February 2005 13:42:24 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 1 March 2016 07:41:44 UTC