From: Pat Hayes (phayes@ai.uwf.edu)
Date: 10/24/01
> >>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. > >If we accept that we can say in rdf "exists x (RDF(x, color, red))", >then I indeed have been arguing for (a) rather than (b) or (c). > >It seems to me that (b) and (c) are saying that we will allow an answer >to a query to contain a binding of a query variable to a constant >created to represent an existential variable. As I think Pat is >pointing out, that makes sense only if the answer is constructed so that >it is clear which constants represent existential variables, and that >for query body instances to be entailed by the KB, the constants in the >answers that represent existential variables need to be appropriately >replaced by existential variables. I wouldn't phrase it quite that way. If the KB uses *constants* then they are perfectly OK as bindings to query variables, right? The issue is what to do if the KB has an existential *variable* in it (eg an anonNode in RDF, say) and the query-answering process would 'succeed' only if it were able to bind this existential to an answer variable. Notice that it would be fine to bind it to a variable in the query that is not an answer variable, as Ian pointed out in the telecon; so its not that the binding itself is logically invalid, only that it wouldn't be correct to deliver that variable as an answer (bound to a query variable), because that delivery - from the KB to the query engine - would take the name outside its scope. So, if we were to block the delivery of the local name from the KB to the query engine, in effect what the KB would be saying would be something like : 'your query is true, and I have found something that satisfies it, but I'm not going to tell what it is.' At which point the 'sensible' thing for the query engine to do is to decide to believe an existential assertion, ie to make up its own local name for the thing that it now knows exists but hasn't been told a name for. >I am ok with that scheme, and so could agree to query variable bindings >in answers that are identified as being gensyms representing existential >variables. I'd say that a gensym was a skolem constant if it was generated by the KB, and that a skolem constant is a perfectly reasonable answer-binding. (The trouble with talking about gensyms in this context is that you have to say who has the licence to generate the sym. Gensyms are local variables inside the scope 'owned' by the generator of the symbol, and in this discussion there are two different generators, using different sets of rules. ) >Just to check, I presume this would apply to cardinality restrictions as >well. For example, if the KB says that persons have exactly two values >of property "parent" (because of a cardinality restriction), the KB does >not identify Pat's parent, and we ask the query RDF(Pat parent ?x), then >I presume the complete set of answers would be the triples (Pat parent >_:p1) and (Pat parent _:p2) (or the bindings {[?x _:p1]} and {[?x >_:p2]}) where _:p1 and _:p2 are noted to be existentials. That raises a more general issue, about how much information should be in an 'answer'. If the answer is just a set of bindings, I would say that in this case expecting to get two existentials back from a cardinality restriction is asking for too much. That is like saying 'who is Pat's parent?' and getting the answer 'Don't know, but I know there are two of them'. That really is an answer to a different question, seems to me. Who knows what the KB might know about Pat's parent? Would you expect to get something like 'Don't know, but I know that one of them had an uncle who was once seen talking to someone in the Chinese civil service'? Pat PS. Example to illustrate the above discussion. Two people, K and Q, are talking to each other. 1. Simple existential query: Q: Is there anything in the soup? K: Yes. 2. Existential query with answer variable binding: Q: Is there anything in the soup, and if so what is it called? K: Yes, but I'm not going to tell you what I call it. 3. Simple existential query with constant name in the KB: Q: Is there anything in the soup, and if so what is it called? K: Yes, and it is called Fred. Q: What kind of thing is Fred? K: Fred is a frog. The basic difference between 2 and 3 is that because the name is handed across the conversational boundary (ie is in the common ground of the conversation, which is like a global scope that contains both conversationalists), it is possible to ask for more information about it in case 3, but not in case 2. So handing out a name gives the querier a handle with which it can eventually extract more of the information about the entity, even though the KB does not deliver it all at once. -- --------------------------------------------------------------------- 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