Re: on behalf of sandro

From: Pat Hayes (
Date: 10/24/01

>>It seemed to me there was a real disagreement at the end of the
>>joint-committee call today.  Here's a test case.  If I understood
>>correctly, Pat (and I) will vote for (b) and Richard will vote for
>>The knowledge base contains the statements: "Pat's car is blue, and
>>there is something colored red."  Somewhat more formally:
>>   RDF(PatsCar, color, blue).
>>   exists x (RDF(x, color, red)).
>>or in N-Triples (ignorng URI syntax)
>>  <patsCar> <color> <blue>.
>>  _:a <color> <red>.
>>And then we have the query: "is there anything with any color?", or
>>RDF(?x, color, ?y).
>>Do we get back
>>(a) 1 triple
>>  <patsCar> <color> <blue>.
>>or (b) 2 triples
>>  <patsCar> <color> <blue>.
>>  _:b <color> <red>.
>>(where I've changed the _:a to _:b just to emphasise that it is an
>>arbitrary term, and its scope does not carry over from the knowledge
>>base to the response).
>>or (c) 2 triples with genid (skolem constant)
>>  <patsCar> <color> <blue>.
>>  <reasonerCreatedSymbol79878687> <color> <red>.
>>If everyone actually is happy with (b), then we were in fact in
>>violent agreement.  If not, then there's a real issue here.

I am happy with b, provided that we pay very strict attention to that 
little business of changing the name. That means, in particular, that 
this cannot be done by BINDING anything in the Kbase to any variable 
in the query. That word 'binding' is the key. The question now 
arises, what exactly is the process by which the query gets answered? 
The 'simple' case is where the query has a body with some variables 
marked as 'answer-binders', and the query is answered when there is a 
binding of the varibles in the query body to terms in the Kbase such 
that the Kbase entails that instance of the query body - all OK so 
far - and the answer is the set of bindings to the answer-binders. 
That last step is the crucial one. If we allow an anonymous node in 
the Kbase to be delivered as a binding to an answer-binder, we have 
in effect taken a name outside its scope, which isn't valid. So there 
is no need to invoke any special 'query-answering' rules to prevent 
this; all we have to say is that the query body should be a valid 
consequence of the Kbase, and this condition will follow 

Notice however that this means that there is no mechanism, in this 
'simple' picture, for delivering the second kind of answer. Where did 
that '_:b' come from? It wasn't in the KB, and its not in the query. 
So until you specify some mechanism for generating it, it won't get 
generated. The basic idea is that it had better not be generated by 
the KB (if it was so generated, it would be more like a skolem 
constant than a bNode), so it has to be generated by the query 
engine. But what process gives the query engine that licence? (Here's 
one possibility. Let the bindings go ahead, but whenever a KB nodeID 
would be bound to an answer binder, just refuse to deliver that 
binding. The query engine then has to invent a new name of its own. 
In effect, the answering engine returns a statement of existence, but 
refuses to allow its private name to be used. This is easy to state, 
but it does go a little beyond the simple Prolog-style binding 

BTW, I hate to make an obvious point, but all this follows directly 
from the RDF (or DAML) model theory, and we would probably get along 
a lot faster if we just referred to the model theory rather than 
reinvent the wheel over and over again.


IHMC					(850)434 8903   home
40 South Alcaniz St.			(850)202 4416   office
Pensacola,  FL 32501			(850)202 4440   fax

This archive was generated by hypermail 2.1.4 : 04/02/02 EST