Re: Non-declarative Constructors?
Date: Sat, 3 Oct 1992 14:53:29 -0500
Message-id: <>
To: macgregor@ISI.EDU, Tom Gruber <>,
Subject: Re: Non-declarative Constructors?

>Substituting "(the-location 30 40)"
>for an object identifier is fine. 

OK, then some of my last message misses your point, sorry.

> From Gruber's response, here
>is a KIF definition of "the-location":
>           (LEGAL-LATITUDE ?LAT)
>           (LEGAL-LONGITUDE ?LON)
>           (LATITUDE ?LOC ?LAT)
>           (LONGITUDE ?LOC ?LON)))
>This definition does NOT include any assertion about the existence
>of location terms (I still think of them as objects, but that's 

OK, I agree.

  Thus, I claim that starting from a knowledge base
>containing only the above declaration, that the statement
>   (retrieve ?loc (the-location 30 40 ?loc))
>should return nil. 

I agree. But there is something odd about that example, because it treats
THE-LOCATION as more like a relation than a function. Thats exactly the
common strategy for making a first-order function into a partial function,
ie to remove its existential committment. Instead of writing FOO(?X ?Y)
which automatically means that if A and B exist then FOO(A B) must exist as
well, you write 
FOO(?X ?Y ?Z), where the third argument is the value, which now has no
special existential claim unless you make it explicitly somewhere else (and
it can be qualified, for example). If you have both, then you can write
FOO(?X ?Y FOO(?X ?Y)) if you can get away with variadic functions of mixed
types (as you can in KIF), but thats a bit peculiar because now one of the
FOO's makes an existential claim and the other doesn't. Which is exactly
the situation in Ramesh's example, I think, ie the right response to the
second query is just [(the-location 30 40)]. 

( Or possibly, the right answer should be 
[(the-location 30 40), (the-location 40 40 (the-location 30 40)) ]
since the second call generated the second term, if it is a term. This
illustrates the ambiguity: is the three-argument thing a function or a
relation? )

Personally (not speaking for KIF here) I like to keep these distinct, since
to use 'THE-LOCATION' for both the function whose value is the location and
the predicate which is true of such locations invites confusion. It might
be better to use 'IS-LOCATION' for the latter, the thing defined by Tom's
KIF expression and reserve THE- names for definitions which do have an
existential force, whether this is obtained by explicit quantifiers or by
the use of (whisper: skolem!) function symbols. Then there is a schema (not
legal KIF) which says 

 (Forall ?X1 ?X2 ...?Xn (IS-alpha ?X1 ?X2 ...?Xn (THE-alpha  ?X1 ?X2

for any string alpha and any n.  

Tom, does this make sense? Could one KIFicate this kind of an assertion by
reflecting into the metalanguage as in FOL?

>> It looks like you are merging the use of terms in first-order reasoning and
>> their use in LISP-type functional reasoning, but this may be a mistake. 
>Perhaps so.  What I wish to do is, from Lisp, retrieve terms from an
>embedded logic system.  If I can't retrieve terms (other
>than built-ins like numbers), then the logic system can't be integrated with
>any kind of object-oriented application.

OK, that makes sense, thanks. I didnt mean they couldnt be suitably
interfaced, only that the mechanism (and semantics) of reasoning by
instantiating universals with terms generated by unification is different
than reasoning by lambda-reduction to get to a normal form of some kind.
But I now think this misses your point, anyway, so forget it.

>>PS, in any case, shouldnt the last answer here be loc-0?

Oh, I thought you were trying something ever so clever, but it was only a
typo :-)


<through 1992>
Beckman Institute                                    (217)244 1616 office
405 North Mathews Avenue        	       	             (217)328 3947 home
Urbana, IL. 61801      (217)244 8371 fax