From: Pat Hayes (phayes@ai.uwf.edu)
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 >>(a). >> >>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 automatically. 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 mechanism. 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. Pat -- --------------------------------------------------------------------- IHMC (850)434 8903 home 40 South Alcaniz St. (850)202 4416 office Pensacola, FL 32501 (850)202 4440 fax phayes@ai.uwf.edu http://www.coginst.uwf.edu/~phayes
This archive was generated by hypermail 2.1.4 : 04/02/02 EST