W3C home > Mailing lists > Public > www-archive@w3.org > June 2003

Re: Existentials in backward chaining

From: Jos De_Roo <jos.deroo@agfa.com>
Date: Tue, 17 Jun 2003 22:25:34 +0200
To: "Graham Klyne <gk" <gk@ninebynine.org>
Cc: naudts guido <naudts_vannoten@yahoo.com>, www-archive@w3.org
Message-ID: <OF7F3D0984.AE9B53BB-ONC1256D48.006EE713-C1256D48.00703580@agfa.be>

Graham, I'm completely in a hurry but I think it is
better to think of bnodes in a premis as of univars
with the scope of the rule (taking care of renaming
their labels). That follows from the internal ~P V C.
This is actually a God's given as a resolution based
backward chainer needs such rule scoped univars.
For facts, skolem constants take over and it's just
for bnodes in conclusions that skolems function terms
are needed (function of the rule scoped univars).
For a query it's the same story as for a premis.

Jos De Roo, AGFA http://www.agfa.com/w3c/jdroo/

                    Graham Klyne                                                                                   
                    <gk@ninebynine       To:     Jos De_Roo/AMDUS/MOR/Agfa-NV/BE/BAYER@AGFA, naudts guido          
                    .org>                 <naudts_vannoten@yahoo.com>                                              
                    2003-06-17           Subject:     Existentials in backward chaining                            
                    02:49 PM                                                                                       


I'm thinking about implementing a backward chaining component for my
Haskell RDF toolkit, and have noticed a potential problem with existentials

(bnodes).  I'm intrigued how you avoid this problem.

Here's my test case:

Suppose we have a simple rule:

      ?f ex:son ?s1 .
      ?f ex:son ?s2 .
      ?s1 ex:brother ?s2 .

To backward chain this requires introducing an existential:  to show
    ex:s1 ex:brother ex:s2 .
one has to show:
    _:f ex:son ex:s1 .
    _:f ex:son ex:s2 .
for some _:f.

    _:s1 ex:sister  ex:d1 .
    _:s1 ex:brother ex:s2 .
    _:f ex:son _:s1 .
    _:f ex:son ex:s2 .
    _:s1 ex:sister  _:d .

but if the original goal is:
    _:s1 ex:sister  _:f .
    _:s1 ex:brother ex:s2 .
one might decide this is true if:
    _:f ex:son _:s1 .
    _:f ex:son ex:s2 .
    _:s1 ex:sister _:f .
which is problematic because if we do a simple union of the graphs we get:
    _:f ex:son _:s1 .
    _:f ex:son ex:s2 .
    _:s1 ex:sister _:f .
or if we do a full merge (with bnode renaming):
    _:f1 ex:son _:s11 .
    _:f1 ex:son ex:s2 .
    _:s12 ex:sister  _:f2 .
neither of which are the answer we seek.  What we really want to capture
    _:f1 ex:son _:s1 .
    _:f1 ex:son ex:s2 .
    _:s1 ex:sister _:f .

The problem arises when the bnode introduced by backward chaining clashes
with a bnode in some other part of the graph with which the antecedent will

subsequently be combined.

I have a plan to tackle this, but it feels a bit complicated and wondered
if you have an easy strategy top avoid the problem.


Graham Klyne
PGP: 0FAA 69FF C083 000B A2E9  A131 01B9 1C7A DBCA CB5E
Received on Tuesday, 17 June 2003 16:26:12 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 14:42:25 UTC