- From: Sean B. Palmer <sean@mysterylights.com>
- Date: Fri, 7 Sep 2001 17:15:19 +0100
- To: "Bullard, Claude L \(Len\)" <clbullar@ingr.com>, "Rex Brooks" <rexb@starbourne.com>, "Ranjeeth Kumar Thunga" <rkthunga@humanmarkup.org>, <humanmarkup-comment@lists.oasis-open.org>, <www-archive@w3.org>
[Len's parts are either prefixed per-line with "> ", or wrapped in "[[["
and "]]]" and not given a source. Anything else wrapped in those delimiters
is quoteed material, and a source given.]
> Sean, how would RDF represent this? Then we should inquire
> as to how a human object uses the knowledge base.
Interestingly, this example reminded me very much of the one in the
Notation3/SW Primer:-
[[[
A simple rule, then, is,
{ sensor:thermostat math:greaterThan "30" . } log:implies {
control:furnace control:setTo "1" . } .
If a system is built which understands all the parts, this would allow it,
give
sensor:thermostat math:greaterThan "30" .
to conclude
control:furnace control:setTo "1"
]]] - http://www.w3.org/2000/10/swap/Primer
$Id: Primer.html,v 1.9 2001/01/05 14:22:22 timbl Exp $
anyway, that's just a digression. The best I can do with representing your
code in RDF is:-
[[[
Given
Episodic fact: (this.action(push red button) -> this.state(heater.On) ->
Result = "hot" )
Context fact: (blue = "cold")
]]]
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix daml: <http://www.daml.org/2001/03/daml+oil#> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
@prefix : <http://infomesh.net/2001/09/humltest/ont#> .
@prefix x: <http://infomesh.net/2001/09/humltest/#> .
:Button a :Mechanism .
:Blue a :Class; rdfs:comment "the class of things which are blue";
rdfs:label "Blue Thing" .
:Red a :Class; rdfs:comment "the class of things which are red";
rdfs:label "Red Thing" .
x:BlueButton a [ daml:intersectionOf (:Button :Blue) ] .
x:RedButton a [ daml:intersectionOf (:Button :Red) ] .
x:Heater a :Heater .
x:AirConditioner a :AirConditioner .
:Push a :Action; :performedBy :Humans; :to :Activate .
:Activated a rdfs:Class; rdfs:comment """the class of things
which have been activated, possibly by pushing""" .
# I'm not sure if one can use compliments in this way, but...
:NotActivated daml:complimentOf :Activated;
rdfs:comment "the class of thing that are not activated" .
{ { x:RedButton a :Activated }
log:implies
{ x:Heater a :Activated . } } a log:Truth .
{ { x:RedButton a :NotActivated }
log:implies
{ x:Heater a :NotActivated . } } a log:Truth .
{ { x:BlueButton a :Activated }
log:implies
{ x:AirConditioner a :Activated } } a log:Truth .
{ { x:BlueButton a :NotActivated }
log:implies
{ x:AirConditioner a :NotActivated } } a log:Truth .
[[[
Learns:
- rules for learning
(this.action (this.object(controls) -> this.state(system.on))
]]]
Hmm... perhaps it is fair to say:-
{ { { :x a :Activated } log:implies { :y a :Activated } .
{ :x a :NotActivated } log:implies { :y a :NotActivated } }
log:implies
{ :x :activates :y } } a log:Truth .
however, if the air conditioner is not activated, that does imply that the
switch is not activated, but it doesn't imply that the air conditioner
actives the switch. Ah, there is a delay in the timing mechanism from the
switch going on to the thing being activated... so the log:implies
predicate isn't quite right here. I'll invent a new one "oftenPrecludes":-
{ x:RedButton a :Activated }
:oftenPrecludes
{ x:Heater a :Activated } .
{ x:RedButton a :NotActivated }
:oftenPrecludes
{ x:Heater a :NotActivated } .
{ x:BlueButton a :Activated }
:oftenPrecludes
{ x:AirConditioner a :Activated } .
{ x:BlueButton a :NotActivated }
:oftenPrecludes
{ x:AirConditioner a :NotActivated } .
and hence the following rule works:-
{ { { :x a :Activated } :oftenPrecludes { :y a :Activated } .
{ :x a :NotActivated } :oftenPrecludes { :y a :NotActivated } }
log:implies
{ :x :activates :y } } a log:Truth; log:forAll :x , :y .
let's feed all that junk into CWM and get it to think about it... aha, it
concluded (correctly):-
x:BlueButton a [
daml:intersectionOf (
:Button
:Blue ) ];
:activates x:AirConditioner .
x:RedButton a [
daml:intersectionOf (
:Button
:Red ) ];
:activates x:Heater .
Neat.
[[[
- rules for specific results
(this.action (push blue button) -> this.state (airConditioner.on) ->
Result="cold")
]]]
Hmm... for that, we probably need:-
# Just accept this for now
{ { :x :oftenPrecludes :y } log:implies { :x log:implies :y } }
a log:Truth; log:forAll :x , :y .
then we have the action itself:-
x:BlueButton a :Activated .
and then we need some rules that explain that when the air conditioner is
on, it is cold:-
{ { :x a :AirConditioner; a :Activated }
log:implies
{ x:RoomTemperature :level :Cool } }
a log:Truth; log:forAll :x .
{ { :x a :Heater; a :Activated }
log:implies
{ x:RoomTemperature :level :Warm } }
a log:Truth; log:forAll :x .
of course, if both are on, then the room temperature is warm and cold... I
couldn't be bothered to account for the fact that they aren't boolean
states (I think CWM can deal with analogues, but it would be beyond the
scope of a mere example). Anyway, let's feed all this new junk into CWM,
get it to -think, and find out what it gives us. Remember, all we have said
is that the blue button is pushed on, and then given it a set of rules to
say that if the blue button is on, then the air conditioner is on, and so
the room temperature is cool. Hooray, it did it:-
x:RoomTemperature :level :Cool .
result! Let's convert the entire Notation3 output into XML RDF, just for a
laugh:-
<!-- Processed by Id: cwm.py,v 1.59 2001/07/03 16:55:52 connolly Exp -->
<!-- using base file:C:\WINDOWS\DESKTOP\BLARGH~1.N3-->
<rdf:RDF xmlns="http://infomesh.net/2001/09/humltest/ont#"
xmlns:daml="http://www.daml.org/2001/03/daml+oil#"
xmlns:log="http://www.w3.org/2000/10/swap/log#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:x="http://infomesh.net/2001/09/humltest/#">
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/#BlueButton">
</Activated>
</log:is>
<oftenPrecludes rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/#AirConditioner">
</Activated>
</oftenPrecludes>
</rdf:Description>
<rdf:Description rdf:about="#_g10">
<log:implies rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/#AirConditioner">
</Activated>
</log:implies>
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<NotActivated
rdf:about="http://infomesh.net/2001/09/humltest/#BlueButton">
</NotActivated>
</log:is>
<oftenPrecludes rdf:parseType="log:Quote">
<NotActivated
rdf:about="http://infomesh.net/2001/09/humltest/#AirConditioner">
</NotActivated>
</oftenPrecludes>
</rdf:Description>
<rdf:Description rdf:about="#_g13">
<log:implies rdf:parseType="log:Quote">
<NotActivated
rdf:about="http://infomesh.net/2001/09/humltest/#AirConditioner">
</NotActivated>
</log:implies>
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/ont#x">
</Activated>
</log:is>
<oftenPrecludes rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/ont#y">
</Activated>
</oftenPrecludes>
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<NotActivated
rdf:about="http://infomesh.net/2001/09/humltest/ont#x">
</NotActivated>
</log:is>
<oftenPrecludes
rdf:parseType="log:Quote">
<NotActivated
rdf:about="http://infomesh.net/2001/09/humltest/ont#y">
</NotActivated>
</oftenPrecludes>
</rdf:Description>
</rdf:Description>
<log:implies rdf:parseType="log:Quote">
<rdf:Description
rdf:about="http://infomesh.net/2001/09/humltest/ont#x">
<activates
rdf:resource="http://infomesh.net/2001/09/humltest/ont#y"/>
</rdf:Description>
</log:implies>
</log:is>
</rdf:Description>
<rdf:type
rdf:resource="http://www.w3.org/2000/10/swap/log#Truth"/>
<log:forAll
rdf:resource="http://infomesh.net/2001/09/humltest/ont#x"/>
<log:forAll
rdf:resource="http://infomesh.net/2001/09/humltest/ont#y"/>
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<rdf:Description
rdf:about="http://infomesh.net/2001/09/humltest/ont#x">
<oftenPrecludes
rdf:resource="http://infomesh.net/2001/09/humltest/ont#y"/>
</rdf:Description>
</log:is>
<log:implies rdf:parseType="log:Quote">
<rdf:Description
rdf:about="http://infomesh.net/2001/09/humltest/ont#x">
<log:implies
rdf:resource="http://infomesh.net/2001/09/humltest/ont#y"/>
</rdf:Description>
</log:implies>
</rdf:Description>
</log:is>
<rdf:type
rdf:resource="http://www.w3.org/2000/10/swap/log#Truth"/>
<log:forAll
rdf:resource="http://infomesh.net/2001/09/humltest/ont#x"/>
<log:forAll
rdf:resource="http://infomesh.net/2001/09/humltest/ont#y"/>
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/ont#x">
<rdf:type
rdf:resource="http://infomesh.net/2001/09/humltest/ont#AirConditioner"/>
</Activated>
</log:is>
<log:implies rdf:parseType="log:Quote">
<rdf:Description
rdf:about="http://infomesh.net/2001/09/humltest/#RoomTemperature">
<level
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Cool"/>
</rdf:Description>
</log:implies>
</rdf:Description>
</log:is>
<rdf:type
rdf:resource="http://www.w3.org/2000/10/swap/log#Truth"/>
<log:forAll
rdf:resource="http://infomesh.net/2001/09/humltest/ont#x"/>
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/ont#x">
<rdf:type
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Heater"/>
</Activated>
</log:is>
<log:implies
rdf:parseType="log:Quote">
<rdf:Description
rdf:about="http://infomesh.net/2001/09/humltest/#RoomTemperature">
<level
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Warm"/>
</rdf:Description>
</log:implies>
</rdf:Description>
</log:is>
<rdf:type
rdf:resource="http://www.w3.org/2000/10/swap/log#Truth"/>
<log:forAll
rdf:resource="http://infomesh.net/2001/09/humltest/ont#x"/>
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/#RedButton">
</Activated>
</log:is>
<oftenPrecludes
rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/#Heater">
</Activated>
</oftenPrecludes>
</rdf:Description>
<rdf:Description rdf:about="#_g32">
<log:implies rdf:parseType="log:Quote">
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/#Heater">
</Activated>
</log:implies>
<rdf:Description>
<log:is rdf:parseType="log:Quote">
<NotActivated
rdf:about="http://infomesh.net/2001/09/humltest/#RedButton">
</NotActivated>
</log:is>
<oftenPrecludes
rdf:parseType="log:Quote">
<NotActivated
rdf:about="http://infomesh.net/2001/09/humltest/#Heater">
</NotActivated>
</oftenPrecludes>
</rdf:Description>
<rdf:Description rdf:about="#_g35">
<log:implies
rdf:parseType="log:Quote">
<NotActivated
rdf:about="http://infomesh.net/2001/09/humltest/#Heater">
</NotActivated>
</log:implies>
</rdf:Description>
<Activated
rdf:about="http://infomesh.net/2001/09/humltest/#AirConditioner">
<rdf:type
rdf:resource="http://infomesh.net/2001/09/humltest/ont#AirConditioner"/>
</Activated>
<rdf:Description
rdf:about="http://infomesh.net/2001/09/humltest/#BlueButton">
<rdf:type rdf:parseType="Resource">
<daml:intersectionOf
rdf:parseType="Resource">
<daml:first
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Button"/>
<daml:rest
rdf:parseType="Resource">
<daml:first
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Blue"/>
<daml:rest
rdf:resource="http://www.daml.org/2001/03/daml+oil#nil"/>
</daml:rest>
</daml:intersectionOf>
</rdf:type>
<rdf:type
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Activated"/>
<activates
rdf:resource="http://infomesh.net/2001/09/humltest/#AirConditioner"/>
</rdf:Description>
<Heater
rdf:about="http://infomesh.net/2001/09/humltest/#Heater">
</Heater>
<rdf:Description
rdf:about="http://infomesh.net/2001/09/humltest/#RedButton">
<rdf:type rdf:parseType="Resource">
<daml:intersectionOf
rdf:parseType="Resource">
<daml:first
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Button"/>
<daml:rest
rdf:parseType="Resource">
<daml:first
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Red"/>
<daml:rest
rdf:resource="http://www.daml.org/2001/03/daml+oil#nil"/>
</daml:rest>
</daml:intersectionOf>
</rdf:type>
<activates
rdf:resource="http://infomesh.net/2001/09/humltest/#Heater"/>
</rdf:Description>
<rdf:Description
rdf:about="http://infomesh.net/2001/09/humltest/#RoomTemperature">
<level
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Cool"/>
</rdf:Description>
<rdfs:Class
rdf:about="http://infomesh.net/2001/09/humltest/ont#Activated">
<rdfs:comment>the class of things
which have been activated, possibly by pushing</rdfs:comment>
</rdfs:Class>
<Class
rdf:about="http://infomesh.net/2001/09/humltest/ont#Blue">
<rdfs:comment>the class of things
which are blue</rdfs:comment>
<rdfs:label>Blue Thing</rdfs:label>
</Class>
<Mechanism
rdf:about="http://infomesh.net/2001/09/humltest/ont#Button">
</Mechanism>
<rdf:Description
rdf:about="http://infomesh.net/2001/09/humltest/ont#NotActivated">
<daml:complimentOf
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Activated"/>
<rdfs:comment>the class of thing
that are not activated</rdfs:comment>
</rdf:Description>
<Action
rdf:about="http://infomesh.net/2001/09/humltest/ont#Push">
<performedBy
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Humans"/>
<to
rdf:resource="http://infomesh.net/2001/09/humltest/ont#Activate"/>
</Action>
<Class
rdf:about="http://infomesh.net/2001/09/humltest/ont#Red">
<rdfs:comment>the class of things
which are red</rdfs:comment>
<rdfs:label>Red Thing</rdfs:label>
</Class>
</rdf:Description>
</rdf:Description>
</rdf:Description>
</rdf:Description>
</log:is>
</rdf:Description>
</rdf:Description>
</rdf:Description>
</rdf:RDF>
There's a wonderful amount of CWM syntactic junk in there, but you get the
idea that XML RDF is a bit unweildy when it comes to expressing FOPL-type
logical statements (implications).
Cheers,
--
Kindest Regards,
Sean B. Palmer
@prefix : <http://webns.net/roughterms/> .
:Sean :hasHomepage <http://purl.org/net/sbp/> .
Received on Friday, 7 September 2001 12:15:45 UTC