;; ============================================================================
;;                           	REARDEN COMMERCE, INC.
;;          	Business Establishment Services and Facilities Ontology
;; ============================================================================

;; Created by: Karen Joy Nomorosa (karen.nomorosa [at] reardencommerce [dot] com)
;; Created on: March 10, 2011
;; Version: 1.0
;; Last modified: March 20, 2011
;; Modified by: Karen Joy Nomorosa (karen.nomorosa [at] reardencommerce [dot] com)

;; Description:  This ontology describes different concepts related to transportation 
;; and parking

;; Ontology dependencies for TransportDetail.kif: Merge.kif, Mid-level-ontology.kif, 
;; Transportation.kif

;; Access to and use of these products is governed by the GNU General Public 
;; License <http://www.gnu.org/copyleft/gpl.html>. 
;; By using these products, you agree to be bound by the terms 
;; of the GPL.

;; We ask the people using or referencing this work cite our primary paper:

;; Niles, I., and Pease, A.  2001.  Towards a Standard Upper Ontology.  In 
;; Proceedings of the 2nd International Conference on Formal Ontology in 
;; Information Systems (FOIS-2001), Chris Welty and Barry Smith, eds, 
;; Ogunquit, Maine, October 17-19, 2001.  See also http://www.ontologyportal.org


(subclass ParkingRegion Region)
(documentation ParkingRegion EnglishLanguage "A &%ParkingRegion is a &%Region where 
&%TransportationDevice is kept temporarily")
(termFormat EnglishLanguage ParkingRegion "Parking")

(=>
  (instance ?PARK ParkingRegion)
  (hasPurpose ?PARK
    (and
      (playsRoleInEvent ?PARK destination ?EVENT)
      (playsRoleInEvent ?TD patient ?EVENT)
      (instance ?TD TransportationDevice))))

(subclass DisabledParking ParkingRegion)
(documentation DisabledParking EnglishLanguage "&%DisabledParking is a &%ParkingRegion 
that is reserved for people bearing the Disabled Placard")
(termFormat EnglishLanguage DisabledParking "disabled parking")

(=>
  (and
    (instance ?PARK DisabledParking)
    (instance ?AGENT Human)
    (attribute ?AGENT ?ATTR)
    (instance ?ATTR Disability))
  (hasPurposeForAgent ?PARK
    (and
      (playsRoleInEvent ?PARK destination ?EVENT)
      (playsRoleInEvent ?TD patient ?EVENT)
      (instance ?TD TransportationDevice)) ?AGENT))
      
(subclass StreetParking ParkingRegion)
(documentation StreetParking EnglishLanguage "&%StreetParking refers to &%ParkingRegion that is 
&%located on a &%Street")
(termFormat EnglishLanguage StreetParking "Street Parking")

(=>
  (instance ?PARK StreetParking)
  (exists (?STREET)
    (and
      (instance ?STREET Street)
      (orientation ?PARK ?STREET On))))

(subclass ParkingLot GeographicArea)
(documentation ParkingLot EnglishLanguage "A &%ParkingLot is a &%GeographicArea that contains 
&%greaterThan one [1] &%ParkingRegion")
(termFormat EnglishLanguage ParkingLot "Parking Lot")

(=>
  (instance ?PARK ParkingLot)
  (exists (?C ?N)
    (and
      (located ?C ?PARK)
      (forall (?SLOT)
        (=>
          (member ?SLOT ?C)
          (instance ?SLOT ParkingRegion)))
      (memberCount ?C ?N)
      (greaterThan ?N 1))))

;; (subclass ParkingGarage Building) ---> can be found in Transportation.kif
(documentation ParkingGarage EnglishLanguage "a &%ParkingGarage is a type of &%Building with a 
&%ParkingLot located in it")
(=>
  (instance ?PARK ParkingGarage)
  (exists (?LOT)
    (and
      (instance ?LOT ParkingLot)
      (located ?LOT ?PARK))))


;; Axiom for "Private Parking"
(=>
  (and
    (possesses ?BUS ?PARK)
    (instance ?BUS CommercialAgent)
    (instance ?PARK ParkingLot)
    (instance ?BLDG Building)
    (located ?BUS ?BLDG)
    (customer ?BUS ?CUST)
    (instance ?DRIVE Driving)
    (patient ?DRIVE ?VEHICLE)
    (agent ?DRIVE ?CUST)
    (destination ?DRIVE ?BLDG))
  (holdsDuring (located ?CUST ?BLDG)
    (confersRight
      (and
        (instance ?PUT Keeping)
        (destination ?PUT ?PARK)
        (patient ?PUT ?VEHICLE)) ?BUS ?CUST)))

(subclass Valet ServicePosition)
(documentation Valet EnglishLanguage "a %&Valet is a person whose primary occupation 
it is to park cars for people")
(termFormat EnglishLanguage Valet "valet")

(=>
  (attribute ?H Valet)
  (occupation ?H (OccupationFn Driving)))

(=>
  (attribute ?H Valet)
  (hasPurpose ?H
    (and
      (instance ?VEHICLE Vehicle)
      (instance ?PUT Putting)
      (destination ?PUT ?PARK)
      (instance ?PARK ParkingRegion)
      (patient ?PUT ?VEHICLE)
      (agent ?PUT ?H))))
      
(subclass ValetParking ServiceProcess)
(documentation ValetParking EnglishLanguage "&%ValetParking refers to the process of 
having a service employee of an establishment park a customer's car for him or her")
(termFormat EnglishLanguage ValetParking "valet parking")

(=>
  (capability ValetParking agent ?AGENT)
  (exists (?VALET)
    (occupiesPosition ?VALET Valet ?AGENT)))

(=>
  (and
    (capability ValetParking agent ?AGENT)
    (customer ?CUST ?AGENT)
    (located ?AGENT ?LOC)
    (instance ?D Arriving)
    (agent ?D ?CUST)
    (patient ?D ?VEHICLE)
    (destination ?D ?LOC))
  (and
    (occupiesPosition ?VALET Valet ?AGENT)
    (modalAttribute
      (exists (?VP)
        (and
          (instance ?VP ValetParking)
          (agent ?VP ?VALET)
          (patient ?VP ?VEHICLE)
          (destination ?VP ?PARK)
          (instance ?PARK ParkingRegion))) Possibility )))
          
(=>
  (and
    (instance ?VP ValetParking)
    (patient ?VP ?VEHICLE)
    (instance ?A Arriving)
    (patient ?A ?VEHICLE))
  (meetsTemporally 
    (EndFn (WhenFn ?A))
    (BeginFn (WhenFn ?VP))))
    
