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