@prefix rdfs: . @prefix daml: . @prefix log: . @prefix : . @prefix x: . :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 # { :Heater a :Activated . } } a log:Truth . # { { x:RedButton a :NotActivated } # log:implies # { :Heater a :NotActivated . } } a log:Truth . # { { x:BlueButton a :Activated } # log:implies # { :AirConditioner a :Activated } } a log:Truth . # { { x:BlueButton a :NotActivated } # log:implies # { :AirConditioner a :NotActivated } } a log:Truth . # { { { :x a :Activated } log:implies { :y a :Activated } . # { :x a :NotActivated } log:implies { :y a :NotActivated } } # log:implies # { :x :activates :y } } a log:Truth . { 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 } . { { { :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 . # Just accept this for now { { :x :oftenPrecludes :y } log:implies { :x log:implies :y } } a log:Truth; log:forAll :x , :y . x:BlueButton a :Activated . { { :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 .