Re: Capturing "Unless explcitly stated"

"Rangarajan Krishnamoorthy" <[email protected]> Thu, 3 Jul 2008 07:50:52 +0530
Newsgroups gmane.comp.ai.powerloom
Message-ID <002701c8dcb3$6f764de0$0201a8c0@COM>
Thank you.

Regards,
Rangarajan

----- Original Message ----- 
From: "Hans Chalupsky" <[email protected]>
To: "Rangarajan Krishnamoorthy" <[email protected]>
Cc: <[email protected]>
Sent: Thursday, July 03, 2008 4:28 AM
Subject: Re: Capturing "Unless explcitly stated"


> Rangarajan,
>
> here is what you need to do: the rule below uses two constructs that
> venture outside the realm of stanrad FOL to achieve what you want:
>
> (1) we use the `query' predicate which allows you to basically run a
> retrieve inside a rule, the main purpose of which is to supply various
> inference control options.  For example, in this case we supply an
> inference level which will only retrieve bindings for ?r that have
> been explicitly asserted.  The use of `query' is a bit esotheric, and
> we should probably invent a nice meta-predicate for this common situation.
>
> (2) we use `fail' to test that no such explicitly asserted regions
> exist in the KB (this is similar to Prolog's negation by failure):
>
> This should give you what you  want, for example:
>
> STELLA(69): (assert (=> (and (fail (exists ?r (query (region-of ?another 
> ?r)
>                                                     :inference-level 
> :assertion
>                                                     :how-many :all)))
>                             (region-of ?part ?region)
>                             (part-of ?another ?part))
>                        (region-of ?another ?region)))
> |P|(FORALL (?another ?part ?region)
>   (<= (REGION-OF ?another ?region)
>       (AND (FAIL (EXISTS (?r)
>                     (QUERY (REGION-OF ?another ?r) :INFERENCE-LEVEL 
> :ASSERTION :HOW-MANY :ALL))) (REGION-OF ?part ?region) (PART-OF ?another 
> ?part))))
> STELLA(70): (ask (region-of abdominal-wall abdominal-region))
> TRUE
> STELLA(71): (assert (region-of abdominal-wall something-else))
> |P|(REGION-OF ABDOMINAL-WALL SOMETHING-ELSE)
> STELLA(72): (ask (region-of abdominal-wall abdominal-region))
> UNKNOWN
> STELLA(73): (retrieve all (region-of abdominal-wall ?r))
> There is 1 solution:
>  #1: ?R=SOMETHING-ELSE
> STELLA(74):
>
> Another way to do this would be to assert your original rule as a
> default rule, e.g.,
>
> (presume
>     (=> (and (region-of ?part ?region) (part-of ?another ?part))
>         (region-of ?another ?region)))
>
> To make this work, you'd also have to define `region-of' as a
> single-valued relation to make sure an explicit assertion would
> override the default conclusion.  Unfortunately, the machinery for
> this in PowerLoom isn't quite working yet, so the original approach is
> the way to go for now.
>
> This case again illustrates the point that with many real domains, one
> reaches the boundaries of standard logic very quickly.
>
> Hans
>
> --------------------------------------------------------------------------
> PowerLoom home page:                 http://www.isi.edu/isd/LOOM/PowerLoom
> PowerLoom forum:                                   [email protected]
> PowerLoom request line:                      [email protected]
> KOJAK home page:                         http://www.isi.edu/isd/LOOM/kojak
> STELLA home page:                       http://www.isi.edu/isd/LOOM/Stella
> --------------------------------------------------------------------------
>
>>>>>> Rangarajan Krishnamoorthy <[email protected]> writes:
>
>> Hi,
>> Consider the following KB in PowerLoom:
>
>> (defconcept BodyPart)
>> (defconcept BodyRegion)
>
>> (defrelation part-of ((?part1 BodyPart) (?part2 BodyPart)))
>> (defrelation region-of ((?part BodyPart) (?region BodyRegion)))
>
>> (assert (part-of abdomen trunk))
>> (assert (region-of abdomen abdominal-region))
>
>> (assert (part-of abdominal-wall abdomen))
>
>> At this point, I want to state a rule:
>> "if A is not explicitly known to be in the region-of B, then A is in the 
>> region of the part C that contains A"
>
>> That is, in the above KB, I want to infer:  (region-of abdominal-wall 
>> abdominal-region)
>
>> However, if we explicitly state the following:
>
>> (assert (region-of abdominal-wall something-else))
>
>> then, we should not conclude: (region-of abdominal-wall
>> abdominal-region), but only (region-of abdominal-wall
>> something-else)
>
>> I defined the following rule:
>
>> (assert
>>     (=> (and (region-of ?part ?region) (part-of ?another ?part))
>>         (region-of ?another ?region)))
>
>> But this does not work correctly because it allows us to infer both the 
>> following:
>
>> (region-of abdominal-wall abdominal-region)
>> (region-of abdominal-wall something-else)
>
>> How do we capture the effect of "unless stated explicitly"?
>
>> Regards,
>
>> Rangarajan