- From: pat hayes <phayes@ai.uwf.edu>
- Date: Sun, 18 Mar 2001 23:19:54 -0600
- To: Graham Klyne <GK@ninebynine.org>
- Cc: www-rdf-logic@w3.org
>At 04:57 PM 3/16/01 -0600, pat hayes wrote:
>>The skolem function f(x,y) is the (hopefully unique) parent of y
>>who is x's child.
>
>I assume the "hopefully unique" was meant as a social rather than a
>logical comment?
Yes. I live very close to Alabama.
>Behind this flippant observation is a more serious question about
>Skolemization: is there any expectation that a Skolem function is
>unique?
Er.. what do you mean? Certainly the value (for a given collection of
arguments) of a particular skolem function, like any other function,
will be unique. But that doesnt mean that the skolem function itself
is unique. In an earlier message I pointed out that a skolem function
is like an existentially quantified function variable (in 2nd order
logic it actually is that), so there could be more than one function
that would do the work of the skolem function, and you have no
guarantee (unless you add some other axioms about the skolem
function, at which point it isnt really a *skolem* function any more)
that your skolem function symbol denotes any particular one of the
possible functions. For example, suppose you have the axiom that
everyone has a parent:
(forall (?x)( => (person ?x)
(exists (?y)(parent ?y ?x))))
and you skolemise it:
(forall (?x)(=> (person ?x)
(parent (f ?x) ?x)))
then certainly (f ?x) is unique, given ?x - since f is a function it
must be - but it could be x's mother or x's father, and you have no
way of knowing which unique person it is. So it is unique in a sense
- it is one or the other - but not in another sense; it is not
uniquely specified; you have no way of knowing (from the axiom alone)
what its value is.
> If so, then statements like:
>
>(forall (?a ?c)( <=> (grandparent ?a ?c)
> (and (parent ?a (f ?a ?c))(parent (f ?a ?c) ?c)))
>))
>
>would seem to be a little problematical.
No, they are always logically correct. Even if there are several
things that would satisfy the existential quantifier and so would
count as possible values of the function, the function itself just
delivers one of them. It always chooses the same one, but you have no
way of knowing which one it is.
In logical axioms, functions arent procedures; they don't get called.
They are just things you know something about, and sometimes you
don't know much at all. Functional programming languages are based on
a definitional style which is guaranteed to provide enough
information to enable you to call a function with argument values and
always get a partial result back, but logic provides no such
guarantees.
Pat Hayes
---------------------------------------------------------------------
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
Received on Monday, 19 March 2001 00:18:18 UTC