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