Re: The Robber and the Speeder: an exciting inference

WOW!  Most cool ....   Thanks!   /Roger

"Richard H. McCullough" wrote:

> For your enjoyment.
> Here is a complete implementation of this example
> using MKR/MKE (http://rhm.cdepot.net/)
>
> <HTML>
> <XMP>
> # KEHOME/knowledge/applications/SemanticWeb/OWL/RobberSpeeder.html
> # Mar/27/2003
>
> #=========#
> # context #
> #=========#
> at view = Match Criminals;
>
>   driversLicenseNumber,
>   registeredGun,
>   serial
>  isa InverseFunctionalProperty;
>   Person has
>     driversLicenseNumber = Literal,
>     registeredGun = Literal;
>   Gun has serial = Literal;
>   Gun License has
>     registeredGun = Literal,
>     holder = Person,
>     driversLicenseNumber = Literal;
>
>   Gun License DB isa relation with
>     format = [registeredGun:1, Person:2, driversLicenseNumber:3],
>     meaning = {
>       $2 has registeredGun=$1;
>       $2 has driversLicenseNumber=$3;
>     };
>
>   Robbery Event DB isa relation with
>     format = [Date:1, Person:2, registeredGun:3],
>     meaning = {
>       at time = $1 {
>         $2 do rob done;
>         $2 has registeredGun = $3;
>       };
>     };
>
>   Speeding Offense DB isa relation with
>     format = [Date:1, Person:2, driversLicenseNumber:3],
>     meaning = {
>       at time = $1 {
>         $2 do speed done;
>         $2 has driversLicenseNumber = $3;
>       };
>     };
>
>   Match Robber and Speeder isa method with
>     label = [Gun License DB, Robbery Event DB, Speeding Offense DB],
>     format = [relation:1, relation:2, relation:3],
>     meaning = {
>       do load od $1, $2, $3 done;
>       every person isa Person {
>         set . = $person;
>         if $person isin $1; then
>           if $registeredGun isin $2; then
>             if $driversLicenseNumber isin $3; then
>               do print od "<!-- matching Robber and Speeder -->"
> done;
>               do print od "Person:               $person"
> done;
>               do print od "registeredGun:        $registeredGun"
> done;
>               do print od "driversLicenseNumber: $driversLicenseNumber"
> done;
>             fi;
>           fi;
>         fi;
>       }; # end every person
>     }; # end meaning
>
> #======#
> # data #
> #======#
> begin relation Gun License DB;
>   ABCD, Fred Bloggs, ZXYZXY;
> end relation Gun License DB;
>
> begin relation Robbery Event DB;
>   date_123, an unknown person, ABCD;
> end relation Robbery Event DB;
>
> begin relation Speeding Offense DB;
>   date_456, John Doe, ZXYZXY;
> end relation Speeding Offense DB;
>
> #=========#
> # results #
> #=========#
> do print od "<!--  input data  -->" done;
> Person              isc* ?;
> Gun License DB      isc* ?;
> Robbery Event DB    isc* ?;
> Speeding Offense DB isc* ?;
>
> do print od "<!--  output results  -->" done;
> do Match Robber and Speeder
>    od Gun License DB, Robbery Event DB, Speeding Offense DB
> done;
>
> ! deletecomment RobberSpeeder.out >RobberSpeeder.save done;
> ! cat RobberSpeeder.save done;
>
> exit;
>
> </XMP>
> </HTML>
>
> ----- Original Message -----
> From: "Roger L. Costello" <costello@mitre.org>
> To: <www-rdf-logic@w3.org>
> Sent: Monday, March 24, 2003 3:10 AM
> Subject: Re: The Robber and the Speeder: an exciting inference
>
> >
> > Outstanding!!!  This is exactly the thing I was looking for - a simple
> > example with compelling inferences.  Thanks a lot Ian!  /Roger
> >
> > Ian Davis wrote:
> > >
> > > On Monday, 17 March 2003 at 17:00, Roger L. Costello wrote:
> > > > Does anyone have ideas on how to enhance my solution to use
> > > > more of OWL's capabilities, and use more inferencing?
> > >
> > > Here's my take on it...it's not as exciting as C.H.I.P.S. though...
> > >
> > > First of all a robbery takes place. The robber drops his gun while
> > > fleeing. A report is filed by the investigating officers:
> > >
> > > <RobberyEvent>
> > >   <date>...</date>
> > >   <description>...</description>
> > >   <evidence>
> > >     <Gun>
> > >       <serial>ABCD</serial>
> > >     </Gun>
> > >   </evidence>
> > >   <robber>
> > >     <Person /> <!-- an unknown person -->
> > >   </robber>
> > > </RobberyEvent>
> > >
> > > Subsequently a car is pulled over for speeding. The traffic officer
> > > files a report electronically while issuing a ticket:
> > >
> > > <SpeedingOffence>
> > >   <date>...</date>
> > >   <description>...</description>
> > >   <speeder>
> > >     <Person>
> > >       <name>John Doe</name>
> > >       <driversLicenseNumber>ZXYZXY</driversLicenseNumber>
> > >     </Person>
> > >   </speeder>
> > > </SpeedingOffence>
> > >
> > > At police HQ, the computer analyses each report as it is filed. The
> > > following OWL rule tells the computer that a driversLicenseNumber is
> > > unique to a Person:
> > >
> > > <owl:InverseFunctionalProperty rdf:ID="driversLicenseNumber">
> > >   <rdfs:domain rdf:resource="Person" />
> > >   <rdfs:range  rdf:resource="&rdf;Literal" />
> > > </owl:FunctionalProperty>
> > >
> > > The computer uses this information to look up any other records it has
> > > about that person and finds a gun license:
> > >
> > > <GunLicense>
> > >   <registeredGun>
> > >     <Gun>
> > >       <serial>ABCD</serial>
> > >     </Gun>
> > >   </registeredGun>
> > >   <holder>
> > >     <Person>
> > >       <name>Fred Bloggs</name>
> > >       <driversLicenseNumber>ZXYZXY</driversLicenseNumber>
> > >     </Person>
> > >   </holder>
> > > </GunLicense>
> > >
> > > The next OWL rule tells the computer that the registeredGun property
> > > uniquely identifies a GunLicense. i.e. each gun is associated with
> > > only a single GunLicense
> > >
> > > <owl:InverseFunctionalProperty rdf:ID="registeredGun">
> > >   <rdfs:domain rdf:resource="GunLicense" />
> > >   <rdfs:range  rdf:resource="Gun" />
> > > </owl:FunctionalProperty>
> > >
> > > The computer now knows that the person stopped for speeding owns a
> > > gun. The next rule tells the computer that each gun is uniquely
> > > identified by its serial.
> > >
> > > <owl:InverseFunctionalProperty rdf:ID="serial">
> > >   <rdfs:domain rdf:resource="Gun" />
> > >   <rdfs:range  rdf:resource="&rdf;Literal" />
> > > </owl:FunctionalProperty>
> > >
> > > The computer uses this to determine that the gun on the license is the
> > > same gun used in the robbery. This final rule, seals the speeder's
> > > fate. It tells the computer that each GunLicense applies to only one
> > > gun and one person, so there is no doubt that the speeder is the person
> > > who owns the gun:
> > >
> > > <owl:Class rdf:ID="GunLicense">
> > >   <owl:intersectionOf rdf:parseType="Collection">
> > >     <owl:Restriction>
> > >       <owl:onProperty rdf:resource="#registeredGun"/>
> > >       <owl:cardinality>1</owl:cardinality>
> > >     </owl:Restriction>
> > >     <owl:Restriction>
> > >       <owl:onProperty rdf:resource="#holder"/>
> > >       <owl:cardinality>1</owl:cardinality>
> > >     </owl:Restriction>
> > >   </owl:intersectionOf>
> > > </Class>
> > >
> > > The computer reports back to the traffic cop who duly arrests the
> > > speeder on suspicion of armed robbery.
> > >
> > > - Ian <iand@internetalchemy.org>
> > > "The test of all knowledge is experiment."
> >

Received on Thursday, 27 March 2003 10:47:41 UTC