- From: Michael Kifer <kifer@cs.sunysb.edu>
- Date: Tue, 10 Jan 2006 15:48:49 -0500
- To: Enrico Franconi <franconi@inf.unibz.it>
- Cc: Dave Reynolds <der@hplb.hpl.hp.com>, Jos de Bruijn <jos.debruijn@deri.org>, public-rif-wg@w3.org
Enrico Franconi <franconi@inf.unibz.it>: > > On 5 Jan 2006, at 15:51, Dave Reynolds wrote: > > On the question of bNodes in the head, I hear the argument that it > > is not sufficient to just treat these as new Skolem constants but > > my intuitive understanding of the issue is too weak. It would be > > really helpful if someone could construct a test case which > > demonstrates the difference in results that arise between correct > > treatment of bNodes in the head versus treatment as Skolem > > constants. In the concrete cases I've seen where bNodes are used in > > the head of rules they seem to be intended as a form of anonymous > > gensym - so the Skolem constant semantics may be the more > > practically useful interpretation. > > A a naive gensym would fail the use case > <http://www.w3.org/2005/rules/wg/wiki/Managing_incomplete_information>, > where two examples > (in section "9.4. (Rules involving generation of unknown)") show how > you can make things wrong with a naive use of skolem constants to > implement the existential variables in the head. Yes, Enrico, Skolemization is not the same as an existential in your use case above, and using it **naively** will be wrong. However, one can **model** the situation differently and obtain essentially the same result as far as the user goals are concerned. For instance, referring to http://www.w3.org/2005/rules/wg/wiki/Managing_incomplete_information one could represent the fact that any traveller has a home address as follows: traveller(enrico). traveller(michael). has_known_address(enrico,bolzano). has_address(?Person,?Addr) :- has_known_address(?Person,?Addr). has_address(?Person,_#(?Person)) :- traveller(?Person), not exists ?A has_known_address(?Person,?A). Here _# denotes a new Skolem function (in the notation of FLORA-2, WSML, and SWSL languages). The above rules are supported (perhaps using different notations) by a number of existing systems, like FLORA-2 and XSB, and by proposed languages like WSML-Rules and SWSL-Rules. So, here we will infer has_address(enrico, bolzano) has_address(michael, $@!2543(michael)) It is even possible to further elaborate and introduce domains so that certain things will be recognized as "null values" or "placeholders" as opposed to known values. Perhaps we should have this in RIF. I grant that this requires some effort on the part of the user to make things right, but the same is true of any language that imposes restrictions on the syntax. DL, for one, is well-known for forcing people to jump through hoops to express things that are easily expressible in other logic languages. --michael
Received on Tuesday, 10 January 2006 20:49:05 UTC