;;;;				Ontology of Transportation 			;;;;

;; 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.

;; Those who are interested in making use of this ontology are requested 
;; to contact Adam Pease (apease [at] articulatesoftware [dot] com).

;; 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

;; Sources:
;; This file creates terms to represent transport-related material in the 
;; CIA World Fact Book 2002 (http://www.cia.gov/cia/publications/factbook/).  
;; Additional concepts from Universal Joint Task List (version 4) 
;; (http://www.dtic.mil/doctrine/jel/cjcsd/cjcsm/m3500_4b.pdf) 
;; Additional references include: on-line Glossary of Landform and 
;; Geologic Terms at http://www.statlab.iastate.edu/soils/nssh/629.htm. 

;; Ontology dependencies: Merge.kif, Geography.kif, Government.kif

;;------------------------------------------------------------------------

;; Outline:
;;
;; I. Transportation concepts for CIA World Fact Book
;;	A. Railways
;;	B. Highways
;;	C. Waterways
;;	D. Pipelines
;;	E. Ports and harbors
;;	F. Merchant marine
;;	G. Airports
;;	H. Airports - with paved runways
;;	J. Heliports
;;	K. Transportation - note
;;
;; II. General Transportation Concepts
;;	A. Translocation
;;	B. Transitways
;;	   1. Land Transitways
;;		a. Roadways
;;		b. Railways
;;	   2. Water Transitways
;;	   3. Air Transitways
;;	   4. Pipelines
;;	C. Vehicles
;;	   1. Land Vehicles
;;		a. Road Vehicles
;;		b. Rail Vehicles
;;		c. Other
;;	   2. Water Vehicles
;;	   3. Air Vehicles
;;	D. Trafficability
;;	   1. Traffic Compatibility
;;	   2. Transitway State	
;;	E. Transit Systems and Routes
;;	   1. Physical Systems
;;	   2. Transit Systems
;;	   3. Transit Terminals
;;	   4. Transitway Junctions
;;	   5. Transit Routes
;;	F. Trips
;;	G. Transitway Capacity
;;	H. Transitway Obstacles
;;	I. Traffic Regulation
;;		1. Transit Authority
;;		2. Transit Control Systems
;;		3. Transit Control Devices
;;		4. Tolls or Usage Fees
;;    5. Transportation Standards
;;	J. Transportation Businesses
;;		1. Business Types
;;		2. Personnel
;;    3. Transportation Services

;;========================================================================

;; I. Transportation Concepts for CIA World Fact Book

;;	A. Railways

(instance totalLengthOfRailwaySystem BinaryPredicate)
(domain totalLengthOfRailwaySystem 1 GeographicArea)
(domain totalLengthOfRailwaySystem 2 LengthMeasure)

(documentation totalLengthOfRailwaySystem EnglishLanguage 
"(&%totalLengthOfRailwaySystem ?AREA ?LENGTH) means that the sum  
length of all railway routes in the &%GeographicArea ?AREA 
is the &%LengthMeasure ?LENGTH.")

(<=>
  (totalLengthOfRailwaySystem ?AREA ?LENGTH)
  (length
    (KappaFn ?RAILWAYS
      (and
        (instance ?RAILWAYS Railway)
        (located ?RAILWAYS ?AREA)))
      ?LENGTH))	

(=>
  (and
    (totalLengthOfRailwaySystem ?AREA ?LENGTH)
    (greaterThan ?LENGTH 0))
  (exists (?RAILWAY)
    (and
      (instance ?RAILWAY Railway)
      (located ?RAILWAY ?AREA))))

(instance lengthOfElectrifiedRailway BinaryPredicate)
(domain lengthOfElectrifiedRailway 1 GeographicArea)
(domain lengthOfElectrifiedRailway 2 LengthMeasure)

(documentation lengthOfElectrifiedRailway EnglishLanguage 
"(&%lengthOfElectrifiedRailway ?AREA ?LENGTH) means that the sum  
length of all &%ElectrifiedRailway routes in the &%GeographicArea 
?AREA is the &%LengthMeasure ?LENGTH.")

(<=>
  (lengthOfElectrifiedRailway ?AREA ?LENGTH)
  (length
    (KappaFn ?RAILWAYS
      (and
        (instance ?RAILWAYS ElectrifiedRailway)
        (located ?RAILWAYS ?AREA)))
        ?LENGTH))

(=>
  (and
    (lengthOfElectrifiedRailway ?AREA ?LENGTH)
    (greaterThan ?LENGTH 0))
  (exists (?RAILWAY)
    (and
      (instance ?RAILWAY ElectrifiedRailway)
      (located ?RAILWAY ?AREA))))

(instance lengthOfMultipleTrackRailway  BinaryPredicate)
(domain lengthOfMultipleTrackRailway  1 GeographicArea)
(domain lengthOfMultipleTrackRailway  2 LengthMeasure)

(documentation lengthOfMultipleTrackRailway EnglishLanguage  
"(&%lengthOfMultipleTrackRailway ?AREA ?LENGTH) means that the sum  
length of all &%MultipleTrackRailway route in the &%GeographicArea 
?AREA is the &%LengthMeasure ?LENGTH.")

(<=>
  (lengthOfMultipleTrackRailway ?AREA ?LENGTH)
  (length
    (KappaFn ?RAILWAYS
      (and
        (instance ?RAILWAYS MultipleTrackRailway)
        (located ?RAILWAYS ?AREA)))
    ?LENGTH))

(=>
  (and
    (lengthOfMultipleTrackRailway ?AREA ?LENGTH)
      (greaterThan ?LENGTH 0))
  (exists (?RAILWAY)
    (and
      (instance ?RAILWAY MultipleTrackRailway)
      (located ?RAILWAY ?AREA))))

(instance lengthOfBroadGaugeRailway BinaryPredicate)
(domain lengthOfBroadGaugeRailway 1 GeographicArea)
(domain lengthOfBroadGaugeRailway 2 LengthMeasure)

(documentation lengthOfBroadGaugeRailway EnglishLanguage 
"(&%lengthOfBroadGaugeRailway ?AREA ?LENGTH) means that the sum length 
of broad gauge railway routes in the &%GeographicArea ?AREA is the 
&%LengthMeasure ?LENGTH.")

(<=>
  (lengthOfBroadGaugeRailway ?AREA ?LENGTH)
  (length
    (KappaFn ?RAILWAYS
      (and
        (instance ?RAILWAYS BroadGaugeRailway)
        (located ?RAILWAYS ?AREA)))
    ?LENGTH))

(=>
  (and
    (lengthOfBroadGaugeRailway ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?RAILWAY)
    (and
      (instance ?RAILWAY BroadGaugeRailway)
      (located ?RAILWAY ?AREA))))

(instance lengthOfDualGaugeRailway BinaryPredicate)
(domain lengthOfDualGaugeRailway 1 GeographicArea)
(domain lengthOfDualGaugeRailway 2 LengthMeasure)

(documentation lengthOfDualGaugeRailway EnglishLanguage 
"(&%lengthOfDualGaugeRailway ?AREA ?LENGTH) means that the sum length 
of dual gauge railway routes in the &%GeographicArea ?AREA is the 
&%LengthMeasure ?LENGTH.")

(<=>
  (lengthOfDualGaugeRailway ?AREA ?LENGTH)
  (length
    (KappaFn ?RAILWAYS
      (and
        (instance ?RAILWAYS DualGaugeRailway)
        (located ?RAILWAYS ?AREA)))
    ?LENGTH))

(=>
  (and
    (lengthOfDualGaugeRailway ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?RAILWAY)
    (and
      (instance ?RAILWAY DualGaugeRailway)
      (located ?RAILWAY ?AREA))))

(instance lengthOfNarrowGaugeRailway BinaryPredicate)
(domain lengthOfNarrowGaugeRailway 1 GeographicArea)
(domain lengthOfNarrowGaugeRailway 2 LengthMeasure)
(documentation lengthOfNarrowGaugeRailway EnglishLanguage 
"(&%lengthOfNarrowGaugeRailway ?AREA ?LENGTH) means that the sum length 
of narrow gauge railway routes in the &%GeographicArea ?AREA is the 
&%LengthMeasure ?LENGTH.")

(<=>
  (lengthOfNarrowGaugeRailway ?AREA ?LENGTH)
  (length
    (KappaFn ?RAILWAYS
      (and
        (instance ?RAILWAYS NarrowGaugeRailway)
        (located ?RAILWAYS ?AREA)))
    ?LENGTH))

(=>
  (and
    (lengthOfNarrowGaugeRailway ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?RAILWAY)
    (and
      (instance ?RAILWAY NarrowGaugeRailway)
      (located ?RAILWAY ?AREA))))

(instance lengthOfStandardGaugeRailway BinaryPredicate)
(domain lengthOfStandardGaugeRailway 1 GeographicArea)
(domain lengthOfStandardGaugeRailway 2 LengthMeasure)

(documentation lengthOfStandardGaugeRailway EnglishLanguage 
"(&%lengthOfStandardGaugeRailway ?AREA ?LENGTH) means that the sum length 
of standard gauge railway routes in the &%GeographicArea ?AREA is the 
&%LengthMeasure ?LENGTH.")

(<=>
  (lengthOfStandardGaugeRailway ?AREA ?LENGTH)
  (length
    (KappaFn ?RAILWAYS
      (and
        (instance ?RAILWAYS StandardGaugeRailway)
        (located ?RAILWAYS ?AREA)))
    ?LENGTH))	

(=>
  (and
    (lengthOfStandardGaugeRailway ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?RAILWAY)
    (and
      (instance ?RAILWAY StandardGaugeRailway)
      (located ?RAILWAY ?AREA))))

(instance lengthOfUnclassifiedGaugeRailway BinaryPredicate)
(domain lengthOfUnclassifiedGaugeRailway 1 GeographicArea)
(domain lengthOfUnclassifiedGaugeRailway 2 LengthMeasure)

(documentation lengthOfUnclassifiedGaugeRailway EnglishLanguage 
"(&%lengthOfUnclassifiedGaugeRailway ?AREA ?LENGTH) means that the sum length 
of railway routes in the &%GeographicArea ?AREA classified as something 
other than broad, dual, narrow, or standard gauge is the &%LengthMeasure 
?LENGTH.")

(<=>
  (lengthOfUnclassifiedGaugeRailway ?AREA ?LENGTH)
  (length
    (KappaFn ?RAILWAYS
      (and
        (located ?RAILWAYS ?AREA)
        (not
          (instance ?RAILWAYS 
            (UnionFn StandardGaugeRailway 
              (UnionFn BroadGaugeRailway 
                (UnionFn DualGaugeRailway 
                  NarrowGaugeRailway)))))))
    ?LENGTH))	

(=>
  (and
    (lengthOfUnclassifiedGaugeRailway ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?RAILWAY)
    (and
      (instance ?RAILWAY Railway)
      (located ?RAILWAY ?AREA))))

(subclass Railway LandTransitway) ;; &%Transitway is defined in Part II.
(subclass Railway StationaryArtifact)
(documentation Railway EnglishLanguage "&%Railway is the subclass of 
&%LandTransitways that have rails along which &%Trains may travel.  
A railway consists of the rail bed, sleepers, tracks, electric 
rails, switches, sensors, lights, crossing grades, and any other 
integral machinery or parts of a section of railway.")

(subclass BroadGaugeRailway Railway)
(subclass DualGaugeRailway Railway)
(subclass NarrowGaugeRailway Railway)
(subclass StandardGaugeRailway Railway)

(subclass ElectrifiedRailway Railway)
(documentation ElectrifiedRailway EnglishLanguage "&%ElectrifiedRailway is the subclass 
of &%Railway representing electrified railways.")

(subclass MultipleTrackRailway Railway)
(documentation MultipleTrackRailway EnglishLanguage "&%MultipleTrackRailway is the 
subclass of &%Railway whose instances consists of two or more sets of 
tracks running in parallel, allowing motion in both directions along 
a route without the need for sidings and delays.")

(=>
	(instance ?RAIL MultipleTrackRailway)
	(exists (?TRACK1 ?TRACK2)
		(and
			(instance ?TRACK1 RailroadTrack)
			(instance ?TRACK2 RailroadTrack)
			(not (equal ?TRACK1 ?TRACK2))
			(part ?TRACK1 ?RAIL)
			(part ?TRACK2 ?RAIL))))

(subclass RailroadTrack StationaryArtifact)
(documentation RailroadTrack EnglishLanguage "&%RailroadTrack is the class of 
&%StationaryArtifacts consisting of rails laid on supports to form 
a track for railway vehicles.")

(subclass TrackGauge InternalAttribute)
(documentation TrackGauge EnglishLanguage "&%TrackGauge is the collection of 
attributes that characterize sections of railways, according 
to the set distances between the two tracks of the &%Railway.  
Precisely, the measurement of track gauge is the distance 
between the inner vertical surfaces of the heads of the rails.  
Track gauges include broad, dual, standard, and narrow gauges.")

(instance trackWidth BinaryPredicate)
(subrelation trackWidth measure)
(documentation trackWidth EnglishLanguage "The distance between the two rails
of a &%Railway.")
(domain trackWidth 1 Railway)
(domain trackWidth 2 LengthMeasure)
                              
(instance BroadGauge TrackGauge)
(documentation BroadGauge EnglishLanguage "&%BroadGauge is the attribute of 
any &%Railway that has a &%TrackGauge wider than &%StandardGauge.")

(=>
	(and
		(instance ?RR Railway)
		(property ?RR BroadGauge)
		(trackWidth ?RR ?WIDTH))
	(greaterThan ?WIDTH (MeasureFn 1.44 Meter)))

(instance StandardGauge TrackGauge)
(documentation StandardGauge EnglishLanguage "&%StandardGauge is the attribute  
of &%Railways having the standardized track width that is 
used in North America and most Western European countries.  
The standard is typically a distance of 4 ft., 8-1/2 inches 
(1.44 meters). There is some variation within which usage is 
compatible, e.g., 1.35 meters. Standard gauge originated in 
England and was mandated by the U.S. Federal government for the 
U.S. Transcontinental Railroad.  It is also used in Canada, 
Great Britain, and most of Western Europe (but not in Ireland, 
or Spain and Portugal.") 

(=>
	(and
		(instance ?RR Railway)
		(property ?RR StandardGauge)
		(trackWidth ?RR ?WIDTH))
	(greaterThanOrEqualTo ?WIDTH (MeasureFn 1.435 Meter)))

(=>
	(and
		(instance ?RR Railway)
		(property ?RR StandardGauge)
		(trackWidth ?RR ?WIDTH))
	(lessThanOrEqualTo ?WIDTH (MeasureFn 1.44 Meter)))

(instance NarrowGauge TrackGauge)
(documentation NarrowGauge EnglishLanguage "&%NarrowGauge is the attribute  
of any &%Railway that has a &%TrackGauge narrower than 
&%StandardGauge.  There are several common track widths 
among &%NarrowGauge railways.") 

(=>
	(and
		(instance ?RR Railway)
		(property ?RR NarrowGauge)
		(trackWidth ?RR ?WIDTH))
	(lessThanOrEqualTo ?WIDTH (MeasureFn 1.435 Meter)))

(instance DualGauge TrackGauge)
(documentation DualGauge EnglishLanguage "&%DualGauge is the attribute of  
any &%Railway that has three parallel rails, thus allowing 
two different gauges of rolling stock to travel over it.") 

;;----------------------------------------------------------------------
;;	B. Highways

(instance totalLengthOfHighwaySystem BinaryPredicate)
(domain totalLengthOfHighwaySystem 1 GeographicArea)
(domain totalLengthOfHighwaySystem 2 LengthMeasure)
(documentation totalLengthOfHighwaySystem EnglishLanguage 
"(&%totalLengthOfHighwaySystem ?AREA ?LENGTH) means that the total 
length of the highway system in the &%GeographicArea ?AREA is ?LENGTH.  
The figure includes both paved and unpaved roads.")

(<=>
  (totalLengthOfHighwaySystem ?AREA ?LENGTH)
  (length 
    (KappaFn ?HIGHWAYS
      (and
        (instance ?HIGHWAYS Roadway)
        (located ?HIGHWAYS ?AREA)))
    ?LENGTH))

(=>
  (and
    (totalLengthOfHighwaySystem ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?HIGHWAY)
    (and                       
      (instance ?HIGHWAY Roadway)
      (located ?HIGHWAY ?AREA))))

(=>
	(and
		(totalLengthOfHighwaySystem ?AREA ?LENGTH)
		(lengthOfPavedHighway ?AREA ?LENGTH1)
		(lengthOfUnpavedHighway ?AREA ?LENGTH2))
	(equal ?LENGTH (AdditionFn ?LENGTH1 ?LENGTH2)))

(=>
	(and
		(totalLengthOfHighwaySystem ?AREA (MeasureFn ?LENGTH ?UNIT))
		(lengthOfPavedHighway ?AREA (MeasureFn ?LENGTH1 ?UNIT))
		(lengthOfUnpavedHighway ?AREA (MeasureFn ?LENGTH2 ?UNIT))
		(instance ?UNIT UnitOfLength))
	(totalLengthOfHighwaySystem ?AREA 
		(MeasureFn (AdditionFn ?LENGTH1 ?LENGTH2) ?UNIT)))

(=>
	(and
		(totalLengthOfHighwaySystem ?AREA ?TOTAL)
		(lengthOfPavedHighway ?AREA ?PAVED))
	(greaterThanOrEqualTo ?TOTAL ?PAVED))

(=>
	(and
		(totalLengthOfHighwaySystem ?AREA ?TOTAL)
		(lengthOfUnpavedHighway ?AREA ?UNPAVED))
	(greaterThanOrEqualTo ?TOTAL ?UNPAVED))

(instance lengthOfPavedHighway BinaryPredicate)
(domain lengthOfPavedHighway 1 GeographicArea)
(domain lengthOfPavedHighway 2 LengthMeasure)
(documentation lengthOfPavedHighway EnglishLanguage 
"(&%lengthOfPavedHighway ?AREA ?LENGTH) means that the total length 
of &%SurfacedRoadway in the &%GeographicArea ?AREA is ?LENGTH.")

(<=>
  (lengthOfPavedHighway ?AREA ?LENGTH)
  (length 
    (KappaFn ?HIGHWAYS
      (and
        (instance ?HIGHWAYS SurfacedRoadway)
        (located ?HIGHWAYS ?AREA)))
    ?LENGTH))

(=>
  (and
    (lengthOfPavedHighway ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?HIGHWAY)
    (and
      (instance ?HIGHWAY SurfacedRoadway)
      (located ?HIGHWAY ?AREA))))

(instance lengthOfExpresswaySystem BinaryPredicate)
(domain lengthOfExpresswaySystem 1 GeographicArea)
(domain lengthOfExpresswaySystem 2 LengthMeasure)
(documentation lengthOfExpresswaySystem EnglishLanguage 
"(&%lengthOfExpresswaySystem ?AREA ?LENGTH) means that the total length 
of &%Expressway in the &%GeographicArea ?AREA is ?LENGTH.")

(<=>
  (lengthOfExpresswaySystem ?AREA ?LENGTH)
  (length 
    (KappaFn ?HIGHWAYS
      (and
        (instance ?HIGHWAYS Expressway)
        (located ?HIGHWAYS ?AREA)))
    ?LENGTH))

(=>
  (and
    (lengthOfExpresswaySystem ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?HIGHWAY)
    (and
      (instance ?HIGHWAY Expressway)
      (located ?HIGHWAY ?AREA))))

(=>
	(and
		(lengthOfExpresswaySystem ?AREA ?LENGTH1)
		(lengthOfPavedHighway ?AREA ?LENGTH2))
	(greaterThanOrEqualTo ?LENGTH2 ?LENGTH1))

(instance lengthOfUnpavedHighway BinaryPredicate)
(domain lengthOfUnpavedHighway 1 GeographicArea)
(domain lengthOfUnpavedHighway 2 LengthMeasure)
(documentation lengthOfUnpavedHighway EnglishLanguage 
"(&%lengthOfUnpavedHighway ?AREA ?LENGTH) means that the total length 
of &%UnsurfacedRoadway in the &%GeographicArea ?AREA is ?LENGTH.")

(<=>
  (lengthOfUnpavedHighway ?AREA ?LENGTH)
  (length 
    (KappaFn ?HIGHWAYS
      (and
        (instance ?HIGHWAYS UnsurfacedRoadway)
        (located ?HIGHWAYS ?AREA)))
    ?LENGTH))

(=>
  (and
    (lengthOfUnpavedHighway ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?HIGHWAY)
    (and
      (instance ?HIGHWAY UnsurfacedRoadway)
      (located ?HIGHWAY ?AREA))))

(subclass Expressway SurfacedRoadway)
(documentation Expressway EnglishLanguage "&%Expressway is the subclass of 
&%SurfacedRoadways that are multiple-lane, limited-access highways 
designed for rapid travel by &%MotorVehicles.")

(subclass SurfacedRoadway Roadway)
(documentation SurfacedRoadway EnglishLanguage "&%SurfacedRoadway is the subclass of 
&%Roadways that have been improved by covering them with a substance 
to increase the hardness and smoothness of the surface.  Covering 
materials include pavement, concrete, asphalt, macadam, and gravel.")

(subclass UnsurfacedRoadway Roadway)
(documentation UnsurfacedRoadway EnglishLanguage "&%UnsurfacedRoadway is the subclass 
of &%Roadways that have natural, unimproved surfaces of dirt or sand.")

(disjoint SurfacedRoadway UnsurfacedRoadway)

;;----------------------------------------------------------------------
;;	C. Waterways

(instance totalLengthOfWaterways BinaryPredicate)
(domain totalLengthOfWaterways 1 GeographicArea)
(domain totalLengthOfWaterways 2 LengthMeasure)
(documentation totalLengthOfWaterways EnglishLanguage 
"(&%totalLengthOfWaterways ?AREA ?LENGTH) means that the 
total length of navigable &%Waterways in the &%GeographicArea ?AREA 
is the &%LengthMeasure ?LENGTH.")

(<=>
  (totalLengthOfWaterways ?AREA ?LENGTH)
  (length 
    (KappaFn ?WATERWAY
      (and
        (instance ?WATERWAY Waterway)
        (partlyLocated ?WATERWAY ?AREA)))
    ?LENGTH))

(=>
  (and
    (totalLengthOfWaterways ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?WATERWAY)
    (and
      (instance ?WATERWAY Waterway)
      (located ?WATERWAY ?AREA))))

;;----------------------------------------------------------------------
;;	D. Pipelines

(instance totalPipelineInArea BinaryPredicate)
(domain totalPipelineInArea 1 GeographicArea)
(domain totalPipelineInArea 2 LengthMeasure)
(documentation totalPipelineInArea EnglishLanguage 
"(&%totalPipelineInArea ?AREA ?LENGTH) means that the &%GeopoliticalArea 
?AREA has ?LENGTH of &%Pipelines.")

(<=>
  (totalPipelineInArea ?AREA ?LENGTH)
  (length 
    (KappaFn ?PIPE
      (and
        (instance ?PIPE Pipeline)
        (located ?PIPE ?AREA)))
  ?LENGTH))

(=>
  (and
    (totalPipelineInArea ?AREA (MeasureFn ?LENGTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (greaterThan ?LENGTH 0))
  (exists (?PIPE)
    (and
      (instance ?PIPE Pipeline)
      (located ?PIPE ?AREA))))

(instance lengthOfCrudeOilPipeline BinaryPredicate)
(domain lengthOfCrudeOilPipeline 1 GeographicArea)
(domain lengthOfCrudeOilPipeline 2 LengthMeasure)
(documentation lengthOfCrudeOilPipeline EnglishLanguage 
"(&%lengthOfCrudeOilPipeline ?AREA ?AMOUNT) means that in the 
&%GeograpicArea ?AREA there is the &%LengthMeasure ?AMOUNT of 
&%CrudeOilPipeline.")

(<=>
  (lengthOfCrudeOilPipeline ?AREA ?LENGTH)
  (length 
    (KappaFn ?PIPELINE
      (and
        (instance ?PIPELINE CrudeOilPipeline)
        (located ?PIPELINE ?AREA)))
  ?LENGTH))

(=>
  (and
    (lengthOfCrudeOilPipeline ?AREA ?AMOUNT1)
    (totalPipelineInArea ?AREA ?AMOUNT2))
  (lessThanOrEqualTo ?AMOUNT1 ?AMOUNT2))

(instance lengthOfNaturalGasPipeline BinaryPredicate)
(domain lengthOfNaturalGasPipeline 1 GeographicArea)
(domain lengthOfNaturalGasPipeline 2 LengthMeasure)
(documentation lengthOfNaturalGasPipeline EnglishLanguage 
"(&%lengthOfNaturalGasPipeline ?AREA ?AMOUNT) means that in the 
&%GeograpicArea ?AREA there is the &%LengthMeasure ?AMOUNT of 
&%NaturalGasPipeline.")

(<=>
  (lengthOfNaturalGasPipeline ?AREA ?LENGTH)
  (length 
    (KappaFn ?PIPELINE
      (and
        (instance ?PIPELINE NaturalGasPipeline)
        (located ?PIPELINE ?AREA)))
    ?LENGTH))

(=>
  (and
    (lengthOfNaturalGasPipeline ?AREA ?AMOUNT1)
    (totalPipelineInArea ?AREA ?AMOUNT2))
  (lessThanOrEqualTo ?AMOUNT1 ?AMOUNT2))

(instance lengthOfPetroleumProductPipeline BinaryPredicate)
(domain lengthOfPetroleumProductPipeline 1 GeographicArea)
(domain lengthOfPetroleumProductPipeline 2 LengthMeasure)
(documentation lengthOfPetroleumProductPipeline EnglishLanguage 
"(&%lengthOfPetroleumProductPipeline ?AREA ?AMOUNT) means that in the 
&%GeograpicArea ?AREA there is the &%LengthMeasure ?AMOUNT of 
&%PetroleumProductPipeline.")

(<=>
  (lengthOfPetroleumProductPipeline ?AREA ?LENGTH)
  (length 
    (KappaFn ?PIPELINE
      (and
        (instance ?PIPELINE PetroleumProductPipeline)
        (located ?PIPELINE ?AREA)))
    ?LENGTH))

(=>
  (and
    (lengthOfPetroleumProductPipeline ?AREA ?AMOUNT1)
    (totalPipelineInArea ?AREA ?AMOUNT2))
  (lessThanOrEqualTo ?AMOUNT1 ?AMOUNT2))

(subclass Pipeline Transitway)
(documentation Pipeline EnglishLanguage "&%Pipeline is the class of pipelines used 
to transport various kinds of fluids.")

(=>
	(and 
		(instance ?PIPE Pipeline)
		(instance ?MOTION Motion)
		(instrument ?MOTION ?PIPE)
		(patient ?MOTION ?STUFF))
	(instance ?STUFF (ExtensionFn Fluid)))

(subclass SewageSystem Pipeline)
(documentation SewageSystem EnglishLanguage "A &%Pipline which is used to transport human 
waste to an area where it can be treated and/or disposed of.")

(=>
  (and
    (instance ?T Transportation)
    (patient ?T ?S)
    (instrument ?T ?SS)
    (instance ?SS SewageSystem))
  (instance ?S Sewage))
    
(subclass CrudeOilPipeline Pipeline)
(documentation CrudeOilPipeline EnglishLanguage "&%CrudeOilPipeline is the subclass of 
&%Pipelines that are used to carry &%CrudeOil.")

(=>
	(and 
		(instance ?PIPE CrudeOilPipeline)
		(instance ?MOTION Motion)
		(instrument ?MOTION ?PIPE)
		(patient ?MOTION ?OIL))
	(instance ?OIL Petroleum))

(subclass NaturalGasPipeline Pipeline)
(documentation NaturalGasPipeline EnglishLanguage "&%NaturalGasPipeline is the subclass 
of &%Pipelines that are used to carry &%NaturalGas.")

(=>
	(and 
		(instance ?PIPE NaturalGasPipeline)
		(instance ?MOTION Motion)
		(instrument ?MOTION ?PIPE)
		(patient ?MOTION ?GAS))
	(instance ?GAS NaturalGas))

(subclass PetroleumProductPipeline Pipeline)
(documentation PetroleumProductPipeline EnglishLanguage 
"&%PetroleumProductPipeline is the subclass of &%Pipelines that are 
used to carry &%PetroleumProducts.")

(=>
	(and 
		(instance ?PIPE PetroleumProductPipeline)
		(instance ?MOTION Motion)
		(instrument ?MOTION ?PIPE)
		(patient ?MOTION ?STUFF))
	(instance ?STUFF PetroleumProduct))

;;----------------------------------------------------------------------
;;	E. Ports and harbors

(subclass RiverPort PortCity)
(documentation RiverPort EnglishLanguage "&%RiverPort is the subclass of &%PortCity 
whose instances are port cities &%Adjacent to a navigable &%River.")

(=>
	(instance ?PORT RiverPort)
	(exists (?RIVER)
		(and
			(instance ?RIVER River)
			(instance ?RIVER Waterway)
			(meetsSpatially ?PORT ?RIVER)))) 

(=>
	(meetsSpatially ?OBJECT1 ?OBJECT2)
	(orientation ?OBJECT1 ?OBJECT2 Adjacent))

(subclass SeaPort PortCity)
(documentation SeaPort EnglishLanguage "&%SeaPort is the subclass of &%PortCity 
whose instances are port cities on or closely linked to a &%Sea or 
&%Ocean.")

(=>
	(instance ?PORT SeaPort)
	(exists (?SEA)
		(and
			(or
				(instance ?SEA Sea)
				(instance ?SEA Ocean))
			(or 
				(orientation ?PORT ?SEA Adjacent)
				(orientation ?PORT ?SEA Near)))))

(subclass ContainerPort PortCity)
(relatedInternalConcept ContainerPort ContainerShip)

(subclass DeepDraftPort PortCity)
(=>
	(instance ?PORT DeepDraftPort)
	(exists (?HARBOR)
		(and
			(instance ?HARBOR DeepDraftHarbor)
			(geographicSubregion ?HARBOR ?PORT))))

(subclass DeepDraftHarbor Harbor)
(documentation DeepDraftHarbor EnglishLanguage "&%DeepDraftHarbor is the subclass 
of &%Harbors that have a &%waterDepth sufficient to accommodate 
vessels of a &%ladenDraft of 45 feet (13.7 meters) or greater.")

(=>
	(instance ?HARBOR DeepDraftHarbor)
	(navigableForDraft ?HARBOR (MeasureFn 13.7 Meter)))

(=>
	(instance ?HARBOR DeepDraftHarbor)
	(navigableForDraft ?HARBOR (MeasureFn 45 FootLength)))

(subclass DeepwaterPort PortFacility)
(documentation DeepwaterPort EnglishLanguage "&%DeepwaterPort is the subclass of 
&%PortFacility whose instances meet the criteria defined under 33 U.S.C.  section 1502(1) as 'any fixed or floating man-made structures other than 
a vessel, or any group of such structures, located beyond the territorial 
sea and off the coast of the United States and which are used or intended 
for use as a port or terminal for the loading or unloading and further 
handling of oil for transportation to any State.... The term includes all associated components and equipment including pipelines, pumping stations, service platforms, mooring buoys, and similar appurtenances to the extent 
they are located seaward of the high water mark.'")

(subclass Harbor WaterArea)
(documentation Harbor EnglishLanguage "&%Harbor is the subclass of &%WaterAreas that 
provide shelter and anchorage for &%WaterVehicle.")

(subclass Anchorage WaterArea)
(documentation Anchorage EnglishLanguage "&%Anchorage is the subclass of &%WaterAreas 
where &%WaterVehicle may anchor with some shelter or safety.  Anchorages 
may be inside a &%Harbor or offshore.")

(subclass OffshoreAnchorage Anchorage)
(documentation OffshoreAnchorage EnglishLanguage "&%OffshoreAnchorage is the subclass 
of &%Anchorages that are located offshore and not within a &%Harbor.")

(=>
	(instance ?ANCHOR OffshoreAnchorage)
	(not 
		(exists (?HARBOR)
			(and
				(instance ?HARBOR Harbor)
				(located ?ANCHOR ?HARBOR)))))

(subclass PortFacility GeopoliticalArea)
(documentation PortFacility EnglishLanguage "&%PortFacility is the class of port 
complexes, including piers and docking space, moorings, cargo-handling 
and other support facilities for marine traffic.  Ships are loaded and 
unloaded at a &%PortFacility.")

;; FUNCTION:
(instance PortFacilityFn UnaryFunction)
(domain PortFacilityFn 1 PortCity)
(range PortFacilityFn PortFacility)

(documentation PortFacilityFn EnglishLanguage "(&%PortFacilityFn ?CITY) denotes the 
&%PortFacility, including mooring areas, docking space, and on-land 
support facilities for marine traffic, of the &%Port ?CITY, considered 
as a whole.")

;;----------------------------------------------------------------------
;;	F. Merchant marine

(subclass MerchantMarine Collection)
(documentation MerchantMarine EnglishLanguage "&%MerchantMarine is a class of 
&%Collections of &%Ships, each collection belonging to a particular 
&%Nation or &%GeopoliticalArea, in whose &%ShipRegister the member 
ships are enrolled.  For example, the merchant marine of &%France.")

;; FUNCTION:
(instance MerchantMarineFn UnaryFunction)
(domain MerchantMarineFn 1 GeopoliticalArea)
(range MerchantMarineFn MerchantMarine)

(documentation MerchantMarineFn EnglishLanguage "(&%MerchantMarineFn ?AREA) denotes 
the &%Collection of all commercial ships registered in the 
&%ShipRegister of the &%GeopoliticalArea ?AREA.")

(=>
	(and
		(instance ?AREA GeopoliticalArea)
		(member ?SHIP (MerchantMarineFn ?AREA)))
	(instance ?SHIP MerchantMarineShip))

(=>
	(and
		(instance ?AREA GeopoliticalArea)
		(instance (MerchantMarineFn ?AREA) MerchantMarine))
	(possesses ?AREA (MerchantMarineFn ?AREA)))

(instance fleetGrossRegisteredTonnage BinaryPredicate)
(domain fleetGrossRegisteredTonnage 1 Collection)
(domain fleetGrossRegisteredTonnage 2 PhysicalQuantity)
(subrelation fleetGrossRegisteredTonnage measure)
(documentation fleetGrossRegisteredTonnage EnglishLanguage 
"(&%fleetGrossRegisteredTonnage ?FLEET ?AMOUNT) means that the 
&%Collection of &%Ships ?FLEET has a total carrying capacity of ?AMOUNT 
in &%RegistryTons.  This is the total &%vesselGrossRegisteredTonnage of 
all the vessels combined.  Gross Registered Tonnage, or GRT, is the 
capacity of a vessel calculated on an equivalence of 100 cubic feet of 
sheltered area per ton.")

(=>
	(and
		(instance ?UNIT UnitOfMass)
		(fleetGrossRegisteredTonnage ?FLEET (MeasureFn ?NUMBER ?UNIT)))
	(equal ?UNIT RegistryTon))

(instance fleetDeadWeightTonnage BinaryPredicate)
(domain fleetDeadWeightTonnage 1 Collection)
(domain fleetDeadWeightTonnage 2 MassMeasure)
(subrelation fleetDeadWeightTonnage measure)
(documentation fleetDeadWeightTonnage EnglishLanguage 
"(&%fleetDeadWeightTonnage ?FLEET ?AMOUNT) means that the &%Collection 
of &%Ships ?FLEET has a total carrying capacity of ?AMOUNT in &%LongTons.  
This is the total &%vesselDeadWeightTonnage of all the vessels combined.  
Dead Weight Tonnage, or DWT, is the weight of cargo plus stores that a  
vessel can carry when immersed to the proper load line.")

(=>
	(and
		(instance ?UNIT UnitOfMass)
		(fleetDeadWeightTonnage ?FLEET (MeasureFn ?NUMBER ?UNIT)))
	(equal ?UNIT LongTon))

(subclass MerchantMarineShip Ship)
(names "merchant ship" MerchantMarineShip)
(names "commercial vessel" MerchantMarineShip)
(documentation MerchantMarineShip EnglishLanguage "&%MerchantMarineShip is the class 
of &%Ships that carry goods or passengers in exchange for payment.  
This excludes military ships, as well as working ships such as tugboats 
and fishing vessels.  Merchant Marine ships belong to the 
&%MerchantMarine of some country and are registered in the related 
&%ShipRegister.")

(=>
  (and
    (instance ?SHIP MerchantMarineShip)
    (measure ?SHIP (MeasureFn ?GRT RegistryTon)))
  (greaterThanOrEqualTo ?GRT 1000))

(instance cargoType BinaryPredicate)
(domain cargoType 1 TransportationDevice)
(domainSubclass cargoType 2 Object)
(documentation cargoType EnglishLanguage "(&%cargoType ?DEVICE ?TYPE) means that the 
&%TransportationDevice ?DEVICE typically carries cargo of the kind 
?TYPE.")

;;-----------------------------------

;; If a ship's registration shows that its flag of registry is <place>, 
;; then a Proposition to that effect is in the registry of that <place> as well. 

(instance marineInventory BinaryPredicate)
(domain marineInventory 1 MerchantMarine)
(domain marineInventory 2 ShipRegister)
(documentation marineInventory EnglishLanguage "A relation between a &%MerchantMarine
and a &%ShipRegister which is a member of that &%MerchantMarine")

(instance fOCShipsByOrigin TernaryPredicate)
(domain fOCShipsByOrigin 1 MerchantMarine)
(domain fOCShipsByOrigin 2 GeopoliticalArea)
(domain fOCShipsByOrigin 3 NonnegativeInteger)
(documentation fOCShipsByOrigin EnglishLanguage 
"(&%fOCShipsByOrigin ?MM ?AREA ?COUNT) means that the 
&%MerchantMarine ?MM has ?COUNT number of ships from the 
&%GeopoliticalArea ?AREA in its &%ShipRegister, using it as 
a &%FlagOfConvenience, although the owner of the ships is in 
?AREA.")

(=>
  (and
    (fOCShipsByOrigin ?MM ?HOME ?COUNT)
    (equal ?MM (MerchantMarineFn ?AREA)))
  (not (equal ?HOME ?AREA)))

(=>
  (and
    (fOCShipsByOrigin ?MM ?HOME ?COUNT)
    (greaterThan ?COUNT 0)
    (marineInventory ?MM ?REGISTER))
  (instance ?REGISTER FlagOfConvenienceRegister))

(instance flagState BinaryPredicate)	
(names "flag state" flagState)
(names "flag of registry" flagState)
(domain flagState 1 WaterVehicle)
(domain flagState 2 GeopoliticalArea)
(documentation flagState EnglishLanguage "(&%flagState ?SHIP ?AREA) means that 
the &%Ship ?SHIP is enrolled in the &%ShipRegister of the 
&%GeopoliticalArea ?AREA and is subject to its maritime laws, 
regulations for operation of the ship, and rules of taxation.")

(subclass ShipRegistration ContentBearingObject)
(names "ship registration" ShipRegistration)
(documentation ShipRegistration EnglishLanguage "&%ShipRegistration is the official 
document containing information about the ownership, size, and 
flag state (flag of registry) of an individual &%Ship, as registered 
in the &%ShipRegister maintained by the maritime authorities of a 
particular &%Nation or &%OverseasArea of a nation.  A ship flies the 
flag of its registered nation or area, and the ship is subject to the 
maritime regulations and rules of taxation of its &%flagState.")

(=>
	(and
		(instance ?REGISTRATION ShipRegistration)
		(instance ?SHIP Ship)
		(possesses ?SHIP ?REGISTRATION)
		(instance ?AREA GeopoliticalArea)
		(flagState ?SHIP ?AREA))
	(subsumesContentInstance (ShipRegisterFn ?AREA) ?REGISTRATION))

(subclass ShipRegister ContentBearingObject)
(documentation ShipRegister EnglishLanguage "A &%ShipRegister is a record of each &%Ship 
and owner registered with the maritime authorities of a country or 
possession, colony, or territory of a country.  Ships on the 
&%ShipRegister of a given region fly the flag of that region and are 
subject to its maritime regulations and rules of taxation.") 

(=>
  (instance ?MM (MerchantMarineFn ?AREA))
  (exists (?REGISTER)
    (and
      (instance ?REGISTER ShipRegister)
      (possesses ?AREA ?REGISTER)
      (marineInventory ?MM ?REGISTER))))

(subclass NationalShipRegister ShipRegister)
(documentation NationalShipRegister EnglishLanguage "A &%NationalShipRegister 
is a record of the &%Ships that are officially registered with 
a particular &%Nation, including their tonnage and ownership.")

(=>
	(and
		(instance ?NATIONAL NationalShipRegister)
		(possesses ?AREA ?NATIONAL))
	(instance ?AREA Nation))

(instance ShipRegisterFn UnaryFunction)
(domain ShipRegisterFn 1 GeopoliticalArea)
(range ShipRegisterFn ShipRegister)
(documentation ShipRegisterFn EnglishLanguage "(&%ShipRegisterFn ?AREA) 
denotes the &%ShipRegister of the &%Ships that fly the flag of 
the &%GeopoliticalArea ?AREA.")

(=>
	(and
		(instance ?AREA GeopoliticalArea)
		(instance (ShipRegisterFn ?AREA) ShipRegister))
	(possesses ?AREA (ShipRegisterFn ?AREA)))

(=>
	(and
		(instance (ShipRegisterFn ?AREA) ShipRegister)
		(instance ?AREA Nation))
	(instance (ShipRegisterFn ?AREA) NationalShipRegister))

(=>
	(and
		(instance (ShipRegisterFn ?AREA) ShipRegister)
		(instance ?AREA OverseasArea))
	(instance (ShipRegisterFn ?AREA) OffshoreShipRegister))

(=>
	(and
		(instance ?SHIP Ship)
		(instance ?AREA GeopoliticalArea)
		(member ?SHIP (MerchantMarineFn ?AREA)))
	(exists (?REGISTRATION)
		(and
			(instance ?REGISTRATION ShipRegistration)
			(possesses ?SHIP ?REGISTRATION)
			(subsumesContentInstance (ShipRegisterFn ?AREA) ?REGISTRATION))))
		
(subclass InternalShipRegister ShipRegister)
(documentation InternalShipRegister EnglishLanguage "&%InternalShipRegister is 
a subset of a &%NationalShipRegister.  Ships on an internal 
register fly the same flag as on the national register but are 
subject to different taxation and crewing rules, which are 
typically more lenient.  An internal register may function 
primarily as a &%FlagOfConvenienceRegister.")

(=>
	(and
		(instance ?INTERNAL InternalShipRegister)
		(possesses ?AREA ?INTERNAL))
	(instance ?AREA Nation))

(subclass OffshoreShipRegister ShipRegister)
(names "captive register" OffshoreShipRegister)
(names "offshore ship register" OffshoreShipRegister)
(documentation OffshoreShipRegister EnglishLanguage "&%OffshoreShipRegister is 
the class of &%ShipRegisters maintained by a colony, territory, or 
possession (&%OffshoreArea) of a nation.  Typically such a register has more lenient maritime 
regulations with respect to taxation and crewing of ships than does 
the national register associated with the country of which the 
offshore area is a dependency.")

(=>
	(and
		(instance ?OFFSHORE OffshoreShipRegister)
		(possesses ?AREA ?OFFSHORE))
	(instance ?AREA Nation))

(subclass FlagOfConvenienceRegister ShipRegister)
(names "flag of convenience" FlagOfConvenienceRegister)
(names "open register" FlagOfConvenienceRegister)
(documentation FlagOfConvenienceRegister EnglishLanguage 
"&%FlagOfConvenienceRegister is the subclass of &%ShipRegisters 
in which most of the registered ships are owned outside of the 
&%GeopoliticalArea to which the registry belongs.  
&%InternalShipRegisters and &%OffshoreShipRegisters both may act as 
&%FlagOfConvenienceRegisters, if permitted by the maritime 
regulations of the registry owner.")

;;----------------------------------------------------------------------
;;	G. Airports

(instance totalFacilityTypeInArea TernaryPredicate)
(domain totalFacilityTypeInArea 1 GeographicArea)
(domain totalFacilityTypeInArea 2 Class)
(domain totalFacilityTypeInArea 3 NonnegativeInteger)
(documentation totalFacilityTypeInArea EnglishLanguage 
"(&%totalFacilityTypeInArea ?AREA ?TYPE ?COUNT) means that in the 
&%GeographicArea ?AREA there a total of ?COUNT number of facilities 
of type ?TYPE.")

(<=>
  (totalFacilityTypeInArea ?AREA ?TYPE ?COUNT)
  (cardinality 
    (KappaFn ?ITEM
      (and
        (instance ?ITEM ?TYPE)
        (located ?ITEM ?AREA))) 
    ?COUNT))

(=>
  (totalFacilityTypeInArea ?AREA ?TYPE ?COUNT)
  (exists (?ITEM)
    (and
      (instance ?ITEM ?TYPE)
      (located ?ITEM ?AREA)))) 

(=>
  (and 
    (totalFacilityTypeInArea ?AREA ?TYPE ?COUNT)
    (equal ?COUNT 0))
  (not
    (exists (?ITEM)
      (and
        (instance ?ITEM ?TYPE)
        (located ?ITEM ?AREA)))))	

(subclass AirTransitway Transitway)
(documentation AirTransitway EnglishLanguage "The subclass of &%Transitways that are through
the &%EarthsAtmosphere.")
(=>
  (instance ?WAY AirTransitway)
  (hasPurpose ?WAY
    (exists (?TRANSPORT) 
      (and 
        (instance ?TRANSPORT Transportation)
        (path ?TRANSPORT ?WAY)
        (partlyLocated ?WAY EarthsAtmosphere)))))
        
(=>
  (and
    (instance ?T AirTransportation)
    (path ?T ?P))
  (instance ?P AirTransitway))
        
(subclass Airport TransitTerminal)
(subclass Airport AirTransitway)
(subclass Airport LandTransitway)
(documentation Airport EnglishLanguage "&%Airport is the subclass of &%TransitTerminals 
for &%Airplanes (fixed-wing &%Aircraft).")

;;----------------------------------------------------------------------
;;	H. Airports - with paved runways

;; Use &%totalFacilityTypeInArea (defined above)
;; with (ExtensionFn AirportWithPavedRunway).  

(<=>
  (totalFacilityTypeInArea ?AREA (ExtensionFn AirportWithPavedRunway) ?COUNT)
  (cardinality 
    (KappaFn ?AIRPORT
      (exists (?RUNWAY)
        (and
          (instance ?AIRPORT Airport)
          (instance ?RUNWAY PavedRunway)
          (part ?RUNWAY ?AIRPORT)
          (located ?AIRPORT ?AREA))))
    ?COUNT))

(=>
  (totalFacilityTypeInArea ?AREA (ExtensionFn AirportWithPavedRunway) ?COUNT)
  (exists (?AIRPORT ?RUNWAY) 
    (and
      (instance ?AIRPORT Airport)
      (instance ?RUNWAY PavedRunway)
      (part ?RUNWAY ?AIRPORT)
      (located ?AIRPORT ?AREA))))

(subclass Runway LandTransitway)  
(documentation Runway EnglishLanguage "&%Runway is the class of &%Transitways that are 
used for the takeoff and landing of &%Airplanes.  &%Runways are 
&%Transitways for an intermodal transit, which begins with a land transit 
and ends with air transit, or vice versa.  The &%Airspace immediately 
above (and adjacent to) a &%Runway is an &%AirTransitway.")

(=>
	(instance ?RUNWAY Runway)
	(exists (?LENGTH)
		(and
			(instance ?LENGTH LengthMeasure)
			(length ?RUNWAY ?LENGTH))))

(subclass PavedRunway Runway)
(documentation PavedRunway EnglishLanguage "&%PavedRunway is the subclass of &%Runways 
that are surfaced with concrete or asphalt.")

(=>
	(and
		(instance ?RUNWAY PavedRunway)
		(surface ?SURFACE ?RUNWAY))
	(or
		(instance ?SURFACE Asphalt)
		(instance ?SURFACE Concrete)))

(=>
	(and
		(instance ?RUNWAY Runway)
		(surface ?SURFACE ?RUNWAY)
		(instance ?SURFACE Asphalt))
	(instance ?RUNWAY PavedRunway))

(=>
	(and
		(instance ?RUNWAY Runway)
		(surface ?SURFACE ?RUNWAY)
		(instance ?SURFACE Concrete))
	(instance ?RUNWAY PavedRunway))

(subclass AirportClassification RelationalAttribute)
(documentation AirportClassification EnglishLanguage "&%AirportClassification 
is a class of &%Attributes for representing systems that categorize 
&%Airports according to some criteria.  There are several such systems, 
including the International Civil Aviation Organization categories A to 
E, based on runway lengths, the Federal Aviation Administration system 
associated with airport functions, and the airport categorization by 
runway length used in the CIA World Fact Book.")

(subclass AirportByRunwaySurface AirportClassification)
(documentation AirportByRunwaySurface EnglishLanguage "&%AirportByRunwaySurface is a 
subclass of &%AirportClassification attributes used to describe an 
airport according to the surface type of its longest runway.")

(instance AirportWithPavedRunway AirportByRunwaySurface)
(documentation AirportWithPavedRunway EnglishLanguage "&%AirportWithPavedRunway is an 
&%AirportClassification attribute used to describe an airport whose 
longest runway is a &%PavedRunway.")

(=>
  (and
    (instance ?AIRPORT Airport)
    (attribute ?AIRPORT AirportWithPavedRunway))
  (exists (?RUNWAY)
    (and
      (instance ?RUNWAY PavedRunway)
      (part ?RUNWAY ?AIRPORT))))

(instance AirportWithUnpavedRunway AirportByRunwaySurface)
(documentation AirportWithUnpavedRunway EnglishLanguage "&%AirportWithUnpavedRunway is 
an &%AirportClassification attribute used to describe an airport whose 
longest runway is an &%UnpavedRunway.")

(=>
  (and
    (instance ?AIRPORT Airport)
    (attribute ?AIRPORT AirportWithUnpavedRunway))
  (exists (?RUNWAY)
    (and
      (instance ?RUNWAY UnpavedRunway)
      (part ?RUNWAY ?AIRPORT))))

(subclass CIAAirportLengthClassification AirportClassification)
(documentation CIAAirportLengthClassification EnglishLanguage 
"&%CIAAirportLengthClassification is a class of &%Attributes used to 
characterize &%Airports according to the length of their longest  
usable runway.")

(instance VeryShortRunwayAirport CIAAirportLengthClassification)
(documentation VeryShortRunwayAirport EnglishLanguage "&%VeryShortRunwayAirport is a CIA 
category for &%Airports whose longest runway is less than 914 meters 
long.")

(=>
	(and
		(instance ?AIRPORT Airport)
		(attribute ?AIRPORT VeryShortRunwayAirport))
	(exists (?RUNWAY ?LENGTH)
		(and
			(instance ?RUNWAY Runway)
			(part ?RUNWAY ?AIRPORT)
			(length ?RUNWAY ?LENGTH)			
			(lessThan ?LENGTH (MeasureFn 914 Meter)))))

(instance ShortRunwayAirport CIAAirportLengthClassification)
(documentation ShortRunwayAirport EnglishLanguage "&%ShortRunwayAirport is a CIA 
category for &%Airports whose longest runway has a length between 914 
meters and 1523 meters, inclusive.")

(=>
	(and
		(instance ?AIRPORT Airport)
		(attribute ?AIRPORT ShortRunwayAirport))
	(exists (?RUNWAY ?LENGTH)
		(and
			(instance ?RUNWAY Runway)
			(part ?RUNWAY ?AIRPORT)
			(length ?RUNWAY ?LENGTH)
		(or
			(greaterThanOrEqualTo ?LENGTH (MeasureFn 914 Meter))
			(lessThanOrEqualTo ?LENGTH (MeasureFn 1523 Meter))))))

(instance MediumLengthRunwayAirport CIAAirportLengthClassification)
(documentation MediumLengthRunwayAirport EnglishLanguage "&%MediumLengthRunwayAirport is a CIA 
category for &%Airports whose longest runway has a length between  
1,524 meters and 2,437 meters, inclusive.")

(=>
	(and
		(instance ?AIRPORT Airport)
		(attribute ?AIRPORT ShortRunwayAirport))
	(exists (?RUNWAY ?LENGTH)
		(and
			(instance ?RUNWAY Runway)
			(part ?RUNWAY ?AIRPORT)
			(length ?RUNWAY ?LENGTH)
		(or
			(greaterThanOrEqualTo ?LENGTH (MeasureFn 1524 Meter))
			(lessThanOrEqualTo ?LENGTH (MeasureFn 2437 Meter))))))

(instance LongRunwayAirport CIAAirportLengthClassification)
(documentation LongRunwayAirport EnglishLanguage "&%LongRunwayAirport is a CIA 
category for &%Airports whose longest runway has a length between  
2,438 meters and 3,047 meters, inclusive.")

(=>
	(and
		(instance ?AIRPORT Airport)
		(attribute ?AIRPORT LongRunwayAirport))
	(exists (?RUNWAY ?LENGTH)
		(and
			(instance ?RUNWAY Runway)
			(part ?RUNWAY ?AIRPORT)
			(length ?RUNWAY ?LENGTH)
			(or
				(greaterThanOrEqualTo ?LENGTH (MeasureFn 2438 Meter))
				(lessThanOrEqualTo ?LENGTH (MeasureFn 3047 Meter))))))

(instance VeryLongRunwayAirport CIAAirportLengthClassification)
(documentation VeryLongRunwayAirport EnglishLanguage "&%VeryLongRunwayAirport is a CIA 
category for &%Airports whose longest runway has a length greater 
than 3,047 meters.")

(=>
	(and
		(instance ?AIRPORT Airport)
		(attribute ?AIRPORT VeryLongRunwayAirport))
	(exists (?RUNWAY ?LENGTH)
		(and
			(instance ?RUNWAY Runway)
			(part ?RUNWAY ?AIRPORT)
			(length ?RUNWAY ?LENGTH)
			(greaterThan ?LENGTH (MeasureFn 3047 Meter)))))
;;----------------------------------------------------------------------

;;	I. Airports - with unpaved runways

;; Use &%totalFacilityTypeInArea (defined above)
;; with (ExtensionFn AirportWithUnpavedRunway)

(=>
  (and
    (totalFacilityTypeInArea ?AREA (ExtensionFn AirportWithUnpavedRunway) ?COUNT)
    (greaterThan ?COUNT 0))
  (exists (?AIRPORT ?RUNWAY)
    (and
      (instance ?AIRPORT Airport)
      (instance ?RUNWAY UnpavedRunway)
      (part ?RUNWAY ?AIRPORT)
      (located ?AIRPORT ?AREA))))

(subclass UnpavedRunway Runway)
(documentation UnpavedRunway EnglishLanguage "&%UnpavedRunways include &%Runways with 
grass, dirt, sand, or gravel surfaces.  Contrast with &%PavedRunway.")

(disjoint PavedRunway UnpavedRunway)

;;----------------------------------------------------------------------
;;	J. Heliports
;;		5 (2002)

;; Use &%totalFacilityTypeInArea  (defined above)

(subclass Heliport TransitTerminal)
(names "heliport" Heliport)
(names "helipad" Heliport)
(documentation Heliport EnglishLanguage "&%Heliport is a &%TransitTerminal designed 
for the takeoff and landing of &%Helicopters.")

(=>
	(instance ?HELO Heliport)
	(trafficableForTrafficType ?HELO Helicopter))

;;----------------------------------------------------------------------

;;	K. Transportation - note [for comments on individual countries]

;;========================================================================

;; II. General Transportation Concepts
;;	A. Translocation
;;	B. Transitways
;;	   1. Land Transitways
;;		a. Roadways
;;		b. Railways
;;	   2. Water Transitways
;;	   3. Air Transitways
;;	   4. Pipelines
;;	C. Vehicles
;;	   1. Land Vehicles
;;		a. Road Vehicles
;;		b. Rail Vehicles
;;		c. Other
;;	   2. Water Vehicles
;;	   3. Air Vehicles
;;	D. Trafficability
;;	   1. Traffic Compatibility
;;	   2. Transitway State	
;;	E. Transit Systems and Routes
;;	   1. Physical Systems
;;	   2. Transit Systems
;;	   3. Transit Terminals
;;	   4. Transitway Junctions
;;	   5. Transit Routes
;;	F. Trips
;;	G. Transitway Capacity
;;	H. Transitway Obstacles
;;	I. Traffic Regulation
;;		1. Transit Authority
;;		2. Transit Control Systems
;;		3. Transit Control Devices
;;		4. Tolls or Usage Fees
;;	J. Transportation Businesses
;;		1. Business Types
;;		2. Personnel

;;-------------------------------------------------------------------------

;;	A. Translocation

(instance TransportationFn UnaryFunction)
(domainSubclass TransportationFn 1 TransportationDevice)
(rangeSubclass TransportationFn Transportation)
(documentation TransportationFn EnglishLanguage 
"(&%TransportationFn ?TYPE) denotes the subclass of &%Transportation 
events in which a &%TransportationDevice of ?TYPE is the vehicle.")

(=>
	(and
		(subclass ?TYPE TransportationDevice)
		(subclass (TransportationFn ?TYPE) Transportation)
		(instance ?TRIP (TransportationFn ?TYPE)))
	(exists (?VEHICLE)
		(and 
			(instance ?VEHICLE ?TYPE)
			(instrument ?TRIP ?VEHICLE))))

(instance TripFn UnaryFunction)
(domain TripFn 1 Vehicle)
(rangeSubclass TripFn Transportation)
(documentation TripFn EnglishLanguage 
"(&%TripFn ?VEHICLE) denotes the subclass of &%Transportation 
events in which a particular &%TransportationDevice ?VEHICLE is the 
vehicle. Contrast this function with &%TransportationFn, which is 
used to denote transportation events by a specific kind of vehicle.")

(=>
	(and
		(instance ?VEHICLE TransportationDevice)
		(instance ?TRIP (TripFn ?VEHICLE)))
	(instrument ?TRIP ?VEHICLE))


  
;;-------------------------------------------------------------------------
;;	B. Transitways

(instance TransitFn UnaryFunction)
(domain TransitFn 1 Transitway)
(rangeSubclass TransitFn Translocation)
(documentation TransitFn EnglishLanguage "(&%TransitFn ?WAY) denotes the class of 
&%Translocations that consist of travelling along the &%Transitway 
?WAY.")

(=>
	(and
		(instance ?GOING (TransitFn ?WAY))
		(instance ?WAY Transitway))
	(path ?GOING ?WAY))

;; KJN: Moving this to Merge.kif  
;;(subrelation path partlyLocated)

;; 	1. Land Transitways
;;	   a. Roadways

;; KJN: Moving to MILO to remove dependencies.
;;(instance Paved Attribute)
;;(instance Unpaved Attribute)

(subclass Bridge LandTransitway) 
(subclass Bridge StationaryArtifact) 
(documentation Bridge EnglishLanguage "&%Bridge is the subclass of &%LandTransitways 
that are artifacts used for crossing water or air-filled gaps that 
could not be transited over a natural surface.")

(subclass FixedBridge Bridge)
(subclass FixedBridge StationaryArtifact)
(subclass MovableBridge Bridge)
(subclass Drawbridge MovableBridge) ;; part or all of it can move
(subclass PontoonBridge MovableBridge) ;; in fact, portable

(subclass Tunnel LandTransitway)
(subclass Tunnel StationaryArtifact)
(documentation Tunnel EnglishLanguage "&%Tunnel is a subclass of &%Transitways that 
consist of a lengthwise enclosed &%Hole that allows for transit 
underground, as through mountains, below a body of water, or beneath a 
city.")

(subclass SecondaryHighway Roadway)
(subclass Street Roadway)

;; KJN: Moving to MILO
;;(subclass Road Roadway)

(subclass Lane Roadway) ;; one-lane auto-passable roadway
(subclass Trail LandTransitway) ;; walkable, skateable, bikeable tracks (snowmobiles, skis?)

;;	(1) b. Railways

;; Railway is defined in Part I.

; CIA factbook gauge types for Railways:
(subclass RailGauge InternalAttribute)
(instance BroadGaugeRail RailGauge)
(instance StandardGaugeRail RailGauge)
(instance NarrowGaugeRail RailGauge)
(instance DualGaugeRail RailGauge)
(contraryAttribute BroadGaugeRail StandardGaugeRail NarrowGaugeRail DualGaugeRail)

;;----------------------------------
;;	2. Water Transitways

;; Waterway is defined in Part I, above

(instance NorthwestPassage Waterway)
(names "Northwest Passage" NorthwestPassage)
(documentation NorthwestPassage EnglishLanguage "&%NorthwestPassage represents the 
seasonal waterway in the &%ArcticOcean adjacent to &%Canada and the 
&%UnitedStates.")

(geographicSubregion NorthwestPassage ArcticOcean)
(geographicSubregion NorthwestPassage WesternHemisphere)

(instance NorthernSeaRoute Waterway)
(names "Northern Sea Route" NorthernSeaRoute)
(documentation NorthernSeaRoute EnglishLanguage "&%NorthernSeaRoute represents the 
seasonal waterway in the &%ArcticOcean adjacent to &%Russia and 
&%Norway.")

(geographicSubregion NorthernSeaRoute ArcticOcean)
(geographicSubregion NorthernSeaRoute EasternHemisphere)

(subclass ShippingLane Waterway)
(subclass ShippingChannel Waterway)
(subclass SeaLane Waterway)  

;; Only navigable Rivers are Waterways:
(=>
	(and
		(instance ?WATER River)
		(trafficableForTrafficType ?WATER ?TYPE)
		(subclass ?TYPE WaterVehicle))
	(instance ?RIVER Waterway))

(subclass Channel Waterway) 
(subclass CanalLock Waterway)
(subclass CanalLock StationaryArtifact)
(subclass Harbor Waterway)  ;; cf. &%PortCity

;;	3. Air Transitways

; Airport defined in Part I, above

;; 	4. Pipelines

;; Pipeline is defined in Part I, above

;;-------------------------------------------------------------------------
;;	C. Vehicles

(instance powerComponent BinaryPredicate)
(instance powerComponent AsymmetricRelation)
(instance powerComponent IrreflexiveRelation)
(domain powerComponent 1 Device)
(domainSubclass powerComponent 2 Artifact)
(subrelation powerComponent component)

(documentation powerComponent EnglishLanguage "(&%powerComponent ?GENERATOR ?THING) 
means that the &%Device ?THING is the power source for the &%Artifact 
?THING.")

(instance topSpeed BinaryPredicate)
(domain topSpeed 1 Vehicle)
(domain topSpeed 2 FunctionQuantity)
(documentation topSpeed EnglishLanguage "The maximum speed under normal conditions
for a vehicle.  For a &%RoadVehicle this would be on level ground, no headwind or
tailwind, 70 degrees F, standard recommended fuel etc.  For an Aircraft this would
mean level flight out of ground effect.  Because of the number of external factors
on top speed, all that can be said formally is that higher speeds are unlikely.")

(=>
  (and
    (topSpeed ?V ?Q)
    (equal ?FASTPROB
      (ProbabilityFn
        (measure ?V 
          (SpeedFn ?L1 ?T1))))
    (equal ?SLOWPROB
      (ProbabilityFn
        (measure ?V 
          (SpeedFn ?L2 ?T2))))
    (greaterThan 
      (SpeedFn ?L1 ?T1)
      (SpeedFn ?L2 ?T2)))
  (greaterThan ?SLOWPROB ?FASTPROB))

;; KJN: Removing these for now per the Product issue
;;(subclass TransportationEquipment ManufacturedProduct)
;;(subclass TransportationDevice TransportationEquipment)

(subclass PassengerVehicle Vehicle)
(documentation PassengerVehicle EnglishLanguage "A &%Vehicle that is designed to
carry &%Humans.  Note that &%Vehicles that are not designed to
carry people may still do so.  For example, a boxcar might still
transport homeless people, but was not built to do so.")
(=>
  (and
    (instance ?VEHICLE PassengerVehicle)
    (instance ?HUMAN Human))
  (capability Transportation patient ?HUMAN))

(subclass CargoVehicle Vehicle)
(documentation CargoVehicle EnglishLanguage "A &%Vehicle that is designed to
carry &%Objects.  Note that &%Vehicles that are primarily designed to carry
people rather than cargo may still carry cargo.  For example, a passenger sedan
might be capable of carrying lumber strapped to the roof.  For this
reason, &%PassengerVehicle and &%CargoVehicle are not disjoint.")
(=>
  (and
    (instance ?VEHICLE CargoVehicle)
    (instance ?OB 
      (KappaFn ?O
        (not 
          (instance ?O Human)))))
  (capability Transportation patient ?OB))
  
;; misc. motor or battery powered, e.g., forklift, tractor, lawnmower, 
;; snowmobile, various construction equipment such as bulldozer, backhoe.  
;; Some of these are devices for moving stuff around, but moving their 
;; riders from one place to another is not the main point.
  
(subclass UnpoweredVehicle Vehicle)
(documentation UnpoweredVehicle EnglishLanguage "A &%Vehicle that lacks a &%powerComponent.
It coasts like a glider or skateboard, thus deriving its power from the
potential energy of gravity, or by the power of its agent, as in a bicycle.")
(=>
  (instance ?UV UnpoweredVehicle)
  (not
    (exists (?P)
      (powerComponent ?P ?UV))))

(subclass PoweredVehicle Vehicle)
(documentation PoweredVehicle EnglishLanguage "A &%Vehicle that has a &%powerComponent.
Note that &%PoweredVehicles include those vehicles that have a &%powerComponent
where the user can and does often choose not to use it, such as a moped with pedals.")
(disjoint PoweredVehicle UnpoweredVehicle)
(=>
  (instance ?UV PoweredVehicle)
  (exists (?P)
    (powerComponent ?P ?UV)))
          
(subclass SelfPoweredRoadVehicle RoadVehicle)
(subclass SelfPoweredRoadVehicle PoweredVehicle)
(documentation SelfPoweredRoadVehicle EnglishLanguage "&%SelfPoweredRoadVehicle is the 
class of &%RoadVehicles that are also &%PoweredVehicles.  
&%SelfPoweredRoadVehicle covers motorcycles, semi-trailers, RVs, etc., 
as well as Automobiles.  This class includes vehicles powered by 
electricity, gasoline, diesel, and other fuels.")

(subclass AgentPoweredVehicle Vehicle)
(documentation AgentPoweredVehicle EnglishLanguage "A &%Vehicle which is powered by
one or more of its passengers or driver, for example, a &%Bicycle.")
; misc. user-powered, skateboard, rollerskates, rollerblades, etc.

;;-------------------------------------
;;	1. Land Vehicles
;;	(1) a. Road Vehicles

(subclass Trailer RoadVehicle)	;; also a CargoContainer
(subclass Trailer UnpoweredVehicle)
(disjoint Trailer PoweredVehicle)
(disjoint Trailer AgentPoweredVehicle)
(documentation Trailer EnglishLanguage "Any &%RoadVehicle that is also an &%UnpoweredVehicle,
and intended to be towed by a &%PoweredVehicle.")

(subclass TractorTrailer RoadVehicle)
(documentation TractorTrailer EnglishLanguage "&%TractorTrailer is the subclass of 
&%RoadVehicles that are truck tractor- truck trailer combinations.")

(=>
  (instance ?TT TractorTrailer)
  (exists (?TRAC ?TRAIL)
    (and
      (instance ?TRAC TruckTractor)
      (instance ?TRAIL TruckTrailer)
      (part ?TRAC ?TT)
      (part ?TRAIL ?TT)
      (connected ?TRAC ?TRAIL))))

(subclass TruckTrailer Wagon)
(documentation TruckTrailer EnglishLanguage "&%TruckTrailer is the subclass of &%Wagons 
that are towed by &%TruckTractors.  These are the trailers used in 
tractor-trailer (semi-trailer) rigs.")

(subclass Wagon LandVehicle)
(subclass Wagon UnpoweredVehicle)
(documentation Wagon EnglishLanguage "A &%Landcraft that is not self-propelled, but must be 
pulled by either an &%Animal or a self-propelled &%Vehicle to move along the 
ground.")

(=>
  (and
    (instance ?W Wagon)
    (instance ?T Transportation)
    (instrument ?T ?W))
  (exists (?P)
    (and
      (instance ?T Pulling)
      (agent ?T ?P)
      (patient ?T ?W)
      (or
        (instance ?P DomesticAnimal)
        (instance ?P Vehicle)))))

(subclass StageCoach Wagon)
(documentation StageCoach EnglishLanguage "A &%Wagon that is pulled by &%Horses and whose purpose 
was to transport Humans and their luggage from one &%City to the next, especially 
in areas which did not have an established transportation system, e.g. the old west.")
   
(subclass LightTruck Truck)

;; KJN: Redundant.  Motorcycle is already defined as SelfPoweredRoadVehicle,
;; which is a RoadVehicle
;;(subclass Motorcycle RoadVehicle)	;; except ATV motocross bikes
(subclass Motorcycle SelfPoweredRoadVehicle)
(documentation Motorcycle EnglishLanguage "Motorcycle is the subclass of &%RoadVehicles 
that have two wheels one behind the other in the frame, upon which the rider 
sits on a seat above the engine.")

(=>
  (instance ?M Motorcycle)
  (equipmentCount ?M VehicleWheel 2))
  
(subclass MotorScooter RoadVehicle)

(subclass EmergencyVehicle PoweredVehicle)
(documentation EmergencyVehicle EnglishLanguage "EmergencyVehicle is the subclass of 
Vehicles that are used for special-purpose emergency response.")

(subclass EmergencyRoadVehicle EmergencyVehicle)
(subclass EmergencyRoadVehicle RoadVehicle)
(subclass EmergencyRoadVehicle PoweredVehicle)
(documentation EmergencyRoadVehicle EnglishLanguage "EmergencyRoadVehicle is the 
subclass of EmergencyVehicle that includes RoadVehicles designed 
for special use in emergencies, e.g., Ambulances, FireEngines.")

(subclass FireEngine EmergencyRoadVehicle)
(documentation FireEngine EnglishLanguage "FireEngine is the subclass of 
EmergencyRoadVehicles that represents the various vehicles
used by a fire department in fighting fires.")

(subclass Ambulance EmergencyRoadVehicle)
(documentation Ambulance EnglishLanguage "&%Ambulance is the subclass of 
&%EmergencyRoadVehicles that represents ambulances.")
(=>
  (instance ?A Ambulance)
  (hasPurpose ?A
    (exists (?P ?T)
      (and
        (instance ?P Human)
        (or
          (attribute ?P DiseaseOrSyndrome)
          (exists (?I)
            (and
              (instance ?I Injuring)
              (experiencer ?I ?H)
              (before ?I ?T))))
        (instance ?T Transportation)
        (instrument ?T ?A)
        (patient ?T ?H))))) 

(subclass Cycle LandVehicle)
(subclass Cycle AgentPoweredVehicle)
(documentation Cycle EnglishLanguage "Cycle is a class of wheeled, pedal-driven 
UserPoweredVehicles that are designed to be ridden on roads or trails.")
(documentation Bicycle EnglishLanguage "Bicycle is a class of two-wheeled, 
&%UserPoweredVehicles.")
(subclass Bicycle Cycle)

(subclass Cycling LandTransportation)
(documentation Cycling EnglishLanguage "&%Cycling is a type of &%LandTransportation
that uses a &%Cycle as an &%instrument")
(termFormat EnglishLanguage Cycling "cycling")

(=>
  (instance ?CYC Cycling)
  (exists (?CYCLE)
    (and
      (instance ?CYCLE Cycle)
      (instrument ?CYC ?CYCLE))))


(subclass Scooter LandVehicle)
(subclass Scooter AgentPoweredVehicle)

(subclass Automobile SelfPoweredRoadVehicle)
(subclass Automobile PassengerVehicle)
(documentation Automobile EnglishLanguage "Automobile is a subclass of 
&%SelfPoweredRoadVehicles including passenger cars, family vans, light 
trucks, and sport utility vehicles.  In general, this class covers 
four-wheeled passenger road vehicles.")

(=>
  (instance ?A Automobile)
  (equipmentCount ?A VehicleWheel 4))

(=>
  (instance ?A Automobile)
  (equipmentCount ?A Axle 2))

(subclass Taxicab Automobile)
(documentation Taxicab EnglishLanguage "An &%Automobile which is used to transport people 
on short trips in exchange for a fare.")  

(subclass Bus SelfPoweredRoadVehicle)
(subclass Bus PassengerVehicle)
(documentation Bus EnglishLanguage "Bus is the subclass of &%SelfPoweredRoadVehicles 
that can transport large numbers of passengers (i.e., dozens) at one 
time. It can be distinguished from a van which is
designed to carry less than a dozen people.")
(=>
  (instance ?B Bus)
  (hasPurpose ?B
    (exists (?C ?T ?N)
      (and
        (instance ?C Collection)
        (instance ?T Transportation)
        (memberCount ?C ?N)
        (greaterThan ?N 11)
        (=>
          (member ?P ?C)
          (patient ?T ?P))))))

(subclass BusStop GeographicArea)
(documentation BusStop EnglishLanguage "An area, often, though not necessarily with
seats or some kind of minimal shelter, where people gather to meet and
board a bus.  It must border a road.")
(=>
  (instance ?X BusStop)
  (hasPurpose ?X
    (exists (?B ?BO ?D)
      (and
        (instance ?B Bus)
        (instance ?BO Boarding)
        (instance ?D Deboarding)
        (eventLocated ?BO ?X)
        (eventLocated ?D ?X)
        (patient ?BO ?B)
        (patient ?D ?B)))))

(=>
  (instance ?X BusStop)
  (exists (?R)
    (and
      (instance ?R Roadway)
      (meetsSpatially ?X ?R))))          
          
(subclass Truck SelfPoweredRoadVehicle)
(subclass Truck CargoVehicle)
(documentation Truck EnglishLanguage "Any &%Vehicle that is intended to carry substantial
amounts of cargo, in addition to passengers.  This includes 18-wheelers,
pickup trucks, tanker trucks etc.  Consumer vehicles with trunks or enclosed
rear areas that can carry cargo are not defined as trucks. Truck is the subclass of &%RoadVehicles that 
are designed primarily for transporting various kinds of non-passenger 
loads.  Truck is the class of single-bodied trucks or &%TruckTractors.  
Note: TractorTrailer combinations are a distinct class.")

(=>
  (instance ?T Truck)
  (exists (?L)
    (and
      (subclass ?L Object)
      (cargoType ?T ?L))))

(subclass TruckTractor Truck)
(documentation TruckTractor EnglishLanguage "&%TruckTractor is the subclass of &%Trucks 
that are used to tow truck trailers.  Truck tractors are the cab portions 
of tractor-trailers.  See also &%TruckTrailer.")

;;	(1) b. Rail Vehicles

(subclass RailVehicle LandVehicle)
(documentation RailVehicle EnglishLanguage "A Vehicle designed to move on &%Railways.")

(=>
  (instance ?X RailVehicle)
  (hasPurpose ?X
    (exists (?EV ?RAIL)
      (and
        (instance ?RAIL Railway)
        (instance ?EV Transportation)
        (holdsDuring
          (WhenFn ?EV)
          (meetsSpatially ?X ?RAIL))))))
 
(subclass Train RailVehicle)
(subclass Train PoweredVehicle)
(subclass Train Collection)
(documentation Train EnglishLanguage "&%Train is the subclass of 
&%TransportationDevice whose instances are linked sequences 
of &%RollingStock.")

(=>
  (instance ?TRAIN Train)
  (exists (?X ?Y)
    (and
      (instance ?X RollingStock)
      (instance ?Y RollingStock)
      (not 
        (equal ?X ?Y)))))

(subclass TrainStation TerminalBuilding)
(documentation TrainStation EnglishLanguage "TrainStation is the subclass of 
&%Buildings that are located at a &%RailwayTerminal and used in support  
of its functions, especially for the handling of passengers and freight.")

(subclass RailTransportationSystem TransitSystem)
(documentation RailTransportationSystem EnglishLanguage "RailTransportationSystem 
is the subclass of &%TransitSystems whose routes are &%Railways.")

(subclass Railcar RollingStock)
(disjoint Railcar PoweredVehicle)
(documentation Railcar EnglishLanguage "Railcar is the subclass of &%RollingStock that 
includes all non-locomotive, non-self-powered &%RailVehicles.")

(subclass RailwayTerminal TransitTerminal)
(documentation RailwayTerminal EnglishLanguage "RailwayTerminal is the subclass of 
&%TransitTerminals designed for &%Trains.  A RailwayTerminal includes 
all the &%RailroadTrack and any outbuildings or other related structure 
in the terminal, as well as the &%TrainStation (if there is one).")

(subclass RoadTransportationSystem TransitSystem)
(documentation RoadTransportationSystem EnglishLanguage "&%RoadTransportationSystem 
is the subclass of &%TransportationSystems whose routes are &%Roadways.")

(=>
  (and
    (instance ?S RoadTransportationSystem)
    (routeInSystem ?P ?S))
  (instance ?P Roadway))

(subclass SubwaySystem RailTransportationSystem)
(documentation SubwaySystem EnglishLanguage "Any &%RailTransportationSystem that runs 
exclusively through &%Tunnels.")

(=>
  (and
    (instance ?S SubwaySystem)
    (routeInSystem ?P ?S))
  (instance ?P Tunnel))

(subclass RollingStock RailVehicle)
(disjoint RoadVehicle RollingStock)
(documentation RollingStock EnglishLanguage "A single rail car.  Any &%RailVehicle that is 
not composed of other &%RailVehicles.") 

(=>
  (instance ?TRAIN Train)
  (not 
    (exists (?X ?Y)
      (and
        (instance ?X RollingStock)
        (instance ?Y RollingStock)
        (not 
          (equal ?X ?Y))))))           
      
(subclass MotorizedRailwayCar RollingStock)
(subclass MotorizedRailwayCar PoweredVehicle)
(documentation MotorizedRailwayCar EnglishLanguage "&%MotorizedRailwayCar is the subclass 
of railway cars that carry their own power source.")

(subclass Locomotive RollingStock)
(subclass Locomotive PoweredVehicle)
(documentation Locomotive EnglishLanguage "An individual rail vehicle, i.e. a
&%RollingStock which is also a &%PoweredVehicle.  Modern
locomotives are typically diesel or electric powered, while
older locomotives ran on &%Coal.")

(subclass PassengerRailcar RollingStock)
(subclass PassengerRailcar PassengerVehicle)
(documentation PassengerRailcar EnglishLanguage "A train car that is designed to
carry &%Humans.")

(=>
  (instance ?CAR PassengerRailcar)
  (capability 
    (KappaFn ?CARRY
      (and
        (instance ?CARRY Transportation)
        (exists (?HUMAN)
          (and
            (instance ?HUMAN Human)
            (patient ?CARRY ?HUMAN))))) instrument ?CAR))
          

(subclass FreightCar RollingStock)
(partition RollingStock PassengerRailcar FreightCar)
(documentation FreightCar EnglishLanguage "A train car that is designed to
carry freight, and not &%Humans.")

(subclass Boxcar FreightCar)
(documentation Boxcar EnglishLanguage "Boxcar is the subclass of Railcars that are 
general-purpose closed cars for hauling freight.")

(subclass BusinessRailcar PassengerRailcar)

(subclass CabCar RollingStock) 
(documentation CabCar EnglishLanguage "&%CabCar is the class of passenger railcars 
that have an operating cab in one end of the from which train motion 
can be controlled in 'push' mode.  A &%CabCar is placed on the 
opposite end of the train from the locomotive.")

(subclass OutfitCar RollingStock) 
(documentation OutfitCar EnglishLanguage "&%OutfitCars are &%Railcars used for housing 
railway construction or maintenance workers in the field.  Also called 
'Camp Cars'.")

(subclass CrewDormCar PassengerRailcar) 
(documentation CrewDormCar EnglishLanguage "&%CrewDormCars are &%Railcars used for 
housing the employee staff on long-distance trains.")

(subclass ElectrifiedRailwayCar RollingStock)
(subclass ElectrifiedRailwayCar PoweredVehicle)
(subclass ElectrifiedRailwayCar ElectricDevice)
(documentation ElectrifiedRailwayCar EnglishLanguage "ElectrifiedRailwayCar is the 
subclass of railway cars that are powered by electricity, which is 
provided to the car through an overhead link or electrified third rail.")

(subclass FiveWellStackCar FreightCar)
(documentation FiveWellStackCar EnglishLanguage "&%FiveWellStackCars are five-unit 
that carry double-stacked containers.")

(subclass Flatcar FreightCar)
(subclass Flatcar OpenTopRailcar)
(documentation Flatcar EnglishLanguage "&%Flatcars are &%Freightcars without sides 
or roofs.")

(subclass GalleryCar PassengerRailcar)
(documentation GalleryCar EnglishLanguage "&%GalleryCars are double-decked passenger 
cars that have a viewing area on the second floor.")

(subclass HeadEndCar RollingStock)
(documentation HeadEndCar EnglishLanguage "&%HeadEndCars are &%Railcars that were 
typically placed at the front of the train, including mail and 
baggage cars.")

(subclass HydraCushionFreightCar FreightCar)
(documentation HydraCushionFreightCar EnglishLanguage "&%HydraCushionFreightCars 
are &%FreightCars with hydraulic underframes to cushion their loads.")

(subclass LocomotiveCoalCar RollingStock)
(documentation LocomotiveCoalCar EnglishLanguage "&%LocomotiveCoalCars are 
&%Railcars put directly behind the &%Locomotive and used for 
carrying fuel coal for the engine.")

(subclass OpenTopRailcar FreightCar)
(documentation OpenTopRailcar EnglishLanguage "&%OpenTopRailcars are &%FreightCars 
that have no roof.  They may have sides or not.")

(subclass MotorRailcar PassengerRailcar) 
(subclass MotorRailcar PoweredVehicle) 
(documentation MotorRailcar EnglishLanguage "&%MotorRailcars are &%PassengerRailcars 
that carry their own power source.")

(subclass Streetcar RollingStock) 
(subclass Streetcar ElectrifiedRailwayCar)
(documentation Streetcar EnglishLanguage "Streetcar is the subclass of 
&%ElectrifiedRailwayCars that run on tracks laid into, along, or 
beside city &%Streets.")

(subclass PCCCar Streetcar)
(subclass PrivateRailcar RollingStock)
(subclass RefrigeratorCar Boxcar)

(subclass RotaryDumpCar OpenTopRailcar) 
(documentation RotaryDumpCar EnglishLanguage "&%RotaryDumpCars are open-top 
cargo carriers that have a rotating coupler allowing them 
to be emptied by dumping while still coupled.")

(subclass ScaleTestCar RollingStock)
(documentation ScaleTestCar EnglishLanguage "&%ScaleTestCars are &%Railcars of 
known weight used to test or calibrate track scales used for 
weighing freight.")

(subclass SpineCar Flatcar)
(documentation SpineCar EnglishLanguage "&%SpineCars are articulated &%Flatcars 
used to carry trailers or containers.")

(subclass TankCar FreightCar)
(documentation TankCar EnglishLanguage "&%TankCars are enclosed &%FreightCars used 
to carry fluids.")

(=>
  (instance ?T TankCar)
  (capability 
    (KappaFn ?TRANS
      (exists (?L)
        (and
          (instance ?L Liquid)
          (instance ?TRANS Transportation)
          (patient ?TRANS ?L)))) 
    instrument ?T))

(subclass CarDistributionSystem OrganizationalProcess)
(documentation CarDistributionSystem EnglishLanguage "&%CarDistributionSystem is the 
process of composing trains according to instructions or data.")

(subclass RailCarrierControl Guiding)
(documentation RailCarrierControl EnglishLanguage "&%RailCarrierControl is the process of 
controlling the speed or direction of a train by sending high or 
low frequency currents on the rails.")


;;------------------------------------
;;	2. Water Vehicles

;; KJN: Moving this to MILO to be with LandVehicle.  Too many dependencies.
;;(subclass WaterVehicle Vehicle)
;;(documentation WaterVehicle EnglishLanguage "&%WaterVehicle is the class of all 
;;&%TransportationDevices used to travel on or in water.")

;;(=>
;;  (instance ?X WaterVehicle)
;;  (hasPurpose ?X
;;    (exists (?EV ?SURF)
;;      (and
;;        (instance ?SURF Water)
;;        (instance ?EV Transportation)
;;        (holdsDuring
;;          (WhenFn ?EV)
;;          (meetsSpatially ?X ?SURF))))))

;;(=>
;;  (and
;;    (instance ?CRAFT WaterVehicle)
;;    (instance ?EVENT Transportation)
;;    (instrument ?EVENT ?CRAFT))
;;  (exists (?WATER)
;;    (and
;;      (instance ?WATER WaterArea)
;;      (eventLocated ?EVENT ?WATER))))

(=>
  (and
    (subclass ?TYPE WaterVehicle)
    (instance ?EVENT (TransportationFn ?TYPE))
    (eventLocated ?EVENT ?PLACE))
  (instance ?PLACE WaterArea))

(subclass MultihullWaterVehicle WaterVehicle)
(subclass Catamaran MultihullWaterVehicle)

(subclass DisplacementHullWaterVehicle WaterVehicle)
(disjoint DisplacementHullWaterVehicle PlaningHullWaterVehicle)
(documentation DisplacementHullWaterVehicle EnglishLanguage "DisplacementHullWaterVehicle is 
a subclass of &%WaterVehicle with hulls designed to move water aside as they 
move through the water.  Contrast with &%PlaningHullWaterVehicle.")

(subclass Ship DisplacementHullWaterVehicle)
(documentation Ship EnglishLanguage "&%Ship is the class of large &%WaterVehicle used 
for travel on oceans, seas, or large lakes.")

(documentation PassengerShip EnglishLanguage "&%PassengerShip is the subclass of 
&%WaterVehicle designed for the purpose of carrying passengers.")
(subclass PassengerShip Ship)

(=>
	(instance ?SHIP PassengerShip)
	(cargoType ?SHIP Human))

(subclass CargoShip Ship)
(documentation CargoShip EnglishLanguage "CargoShip is the subclass of Ships that 
transport goods in exchange for payment.  CargoShip includes ships 
that carry all kinds of cargo, including oil and bulk products as well 
as packaged, palletized, or containerized goods.")

(subclass GeneralCargoShip CargoShip)
(names "freighter" CargoShip)

(=>
	(instance ?SHIP GeneralCargoShip)
	(cargoType ?SHIP Product))

(subclass PalletizedCargoShip GeneralCargoShip)
(subclass DeckCargoShip GeneralCargoShip)

(subclass BargeCarrierShip CargoShip)

(subclass LivestockCarrierShip CargoShip)
(=>
	(instance ?SHIP LivestockCarrierShip)
	(cargoType ?SHIP Livestock))

(subclass ContainerShip CargoShip)
(=>
	(instance ?SHIP ContainerShip)
	(cargoType ?SHIP ShipContainer))

(subclass RefrigeratedCargoShip CargoShip)
(names "refrigerated carrier" RefrigeratedCargoShip)

(subclass RollOnRollOffCargoShip CargoShip)
(names "roll-on roll-off" RollOnRollOffCargoShip)
(names "Ro-Ro" RollOnRollOffCargoShip)

(subclass Container-RoRoCargoShip RollOnRollOffCargoShip)

(subclass VehicleCarrierShip RollOnRollOffCargoShip)
(=>
	(instance ?SHIP VehicleCarrierShip)
	(cargoType ?SHIP Vehicle))

(subclass Passenger-LandingCraft RollOnRollOffCargoShip)
(subclass Passenger-LandingCraft PassengerAndCargoShip)

(subclass RailcarCarrierShip RollOnRollOffCargoShip)
(=>
	(instance ?SHIP RailcarCarrierShip)
	(cargoType ?SHIP RollingStock))

(subclass MultifunctionalLargeLoadCarrierShip CargoShip)
(names "heavy lift carrier" MultifunctionalLargeLoadCarrierShip)
(names "heavy cargo carrier" MultifunctionalLargeLoadCarrierShip)  
  
(subclass PetroleumTankerShip CargoShip)
(names "petroleum tanker" PetroleumTankerShip)
(names "oil tanker" PetroleumTankerShip)

(=>
	(instance ?SHIP PetroleumTankerShip)
	(cargoType ?SHIP PetroleumProduct))

(subclass ChemicalTankerShip CargoShip)
(names "chemical carrier" ChemicalTankerShip)

(=>
	(instance ?SHIP ChemicalTankerShip)
	(cargoType ?SHIP ChemicalProduct))

(documentation ChemicalTankerShip EnglishLanguage "&%ChemicalTankerShip is the 
subclass of ships that carry &%ChemicalProducts.")
(subclass Chemical-OilTankerShip ChemicalTankerShip)

(subclass LiquefiedGasTankerShip CargoShip)
(names "Liquefied gas carrier" LiquefiedGasTankerShip)

(=>
	(instance ?SHIP LiquefiedGasTankerShip)
	(cargoType ?SHIP ChemicalProduct))

(=>
	(instance ?SHIP LiquefiedGasTankerShip)
	(cargoType ?SHIP (ExtensionFn Liquid)))

(subclass LiquefiedGas-ChemicalTankerShip LiquefiedGasTankerShip)

(subclass CombinationBulkCarrierShip CargoShip)
(names "combination carrier" CombinationBulkCarrierShip)

(subclass CombinationBulk-OilCarrierShip CombinationBulkCarrierShip)

(=>
	(instance ?SHIP CombinationBulk-OilCarrierShip)
	(cargoType ?SHIP Object))

(=>
	(instance ?SHIP CombinationBulk-OilCarrierShip)
	(cargoType ?SHIP Petroleum))

(subclass CombinationOre-OilCarrierShip CombinationBulkCarrierShip)

(=>
	(instance ?SHIP CombinationOre-OilCarrierShip)
	(cargoType ?SHIP Mineral))

(=>
	(instance ?SHIP CombinationOre-OilCarrierShip)
	(cargoType ?SHIP Petroleum))

(subclass DryBulkCarrierShip CargoShip)

(subclass BulkCargoShip DryBulkCarrierShip)
(subclass OreCarrierShip DryBulkCarrierShip)
(subclass SelfDischargingBulkCarrierShip DryBulkCarrierShip)
(subclass CementCarrierShip DryBulkCarrierShip)
(subclass WoodChipsCarrierShip DryBulkCarrierShip)
(subclass UreaCarrierShip DryBulkCarrierShip)

(subclass SpecializedTankerShip CargoShip)
(=>
	(instance ?SHIP SpecializedTankerShip)
	(cargoType ?SHIP (ExtensionFn Fluid)))

(subclass PassengerAndCargoShip PassengerShip)
(subclass PassengerAndCargoShip CargoShip)
(subclass ShortSeaPassengerShip PassengerShip)
  
(subclass FishingShip WaterVehicle)

(subclass Trawler FishingShip)
(subclass FishFactoryShip FishingShip)
(subclass FishCarrierShip FishingShip)
(subclass FishingVessel FishingShip)

(subclass OffshoreSupplyShip Ship)
(subclass OffshoreSupportShip Ship)
(subclass OffshoreWellProductionShip Ship)
(subclass DrillingShip Ship)
(subclass ResearchShip Ship)
(subclass PusherTug TugBoat)
(subclass Dredger Ship)
(subclass HopperDredger Dredger)
(subclass MotorHopper Ship)
(subclass SludgeDisposalVessel Ship)
(subclass CraneShip Ship)
(subclass CableShip Ship)
(subclass IceBreakerShip Ship)  

(subclass AircraftCarrier MilitaryShip)
(documentation AircraftCarrier EnglishLanguage "A MilitaryShip on which MilitaryAircraft can land 
and take off.")
  
(subclass PlaningHullWaterVehicle WaterVehicle)
(documentation PlaningHullWaterVehicle EnglishLanguage "PlaningHullWaterVehicle is a subclass 
of &%WaterVehicle with hulls designed for a position partially on or above 
the water surface when they are in motion, in order to reduce drag.  See 
also &%DisplacementHullWaterVehicle.")

(subclass CruiseShip PassengerShip)
(documentation CruiseShip EnglishLanguage "&%CruiseShip is the subclass of 
&%PassengerShips designed for the purpose of carrying passengers 
on extended trips.")

(subclass OceanLiner PassengerShip)
(subclass OceanLiner CargoShip)

(documentation OceanLiner EnglishLanguage "&%OceanLiner is the subclass of &%Ships 
that make regularly scheduled voyages to transport people and goods 
from one place to another.")

(subclass Barge WaterVehicle)
(subclass TugBoat WaterVehicle)
(subclass FireBoat WaterVehicle)
(subclass FerryBoat WaterVehicle)

(subclass Runabout WaterVehicle)
(subclass Sailboat WaterVehicle)
(subclass Canoe WaterVehicle)
(subclass Canoe AgentPoweredVehicle)
(subclass Kayak WaterVehicle)
(subclass Kayak AgentPoweredVehicle)

(subclass PersonalWatercraft WaterVehicle)
(names "Jet Ski" PersonalWatercraft)
(documentation PersonalWatercraft EnglishLanguage "&%PersonalWatercraft is the class 
of motor-driven &%WaterVehicle ridden by one or more passengers, e.g., 
a JetSki.")

;;----------------------------------
;; Size and other measures for WaterVehicle:

(instance vesselDisplacement BinaryPredicate)
(domain vesselDisplacement 1 WaterVehicle)
(domain vesselDisplacement 2 PhysicalQuantity)
(subrelation vesselDisplacement measure)
(documentation vesselDisplacement EnglishLanguage 
"(&%vesselDisplacement ?VESSEL ?AMOUNT) means that the displacement 
of &%WaterVehicle ?VESSEL is the &%PhysicalQuantity ?AMOUNT.  The 
displacement of a vessel may be measured in &%LongTons (Dead Weight 
Tonnage, or DWT) or by volume (Gross Registered Tonnage, or GRT).")

(instance vesselDeadWeightTonnage BinaryPredicate)
(domain vesselDeadWeightTonnage 1 WaterVehicle)
(domain vesselDeadWeightTonnage 2 MassMeasure)
(subrelation vesselDeadWeightTonnage vesselDisplacement)
(documentation vesselDeadWeightTonnage EnglishLanguage 
"(&%vesselDeadWeightTonnage ?VESSEL ?AMOUNT) means that the 
&%WaterVehicle ?VESSEL has a carrying capacity when fully loaded of 
?AMOUNT in &%LongTons.  This is the Dead Weight Tonnage, or DWT, 
of the vessel, which is the total weight of cargo plus stores 
that the vessel can carry when immersed to the proper load line.")

(instance vesselGrossRegisteredTonnage BinaryPredicate)
(domain vesselGrossRegisteredTonnage 1 WaterVehicle)
(domain vesselGrossRegisteredTonnage 2 PhysicalQuantity)
(subrelation vesselGrossRegisteredTonnage vesselDisplacement)
(documentation vesselGrossRegisteredTonnage EnglishLanguage 
"(&%vesselGrossRegisteredTonnage ?VESSEL ?AMOUNT) means that the 
&%WaterVehicle ?VESSEL has a carrying capacity when fully loaded of 
?AMOUNT, where ?AMOUNT is the Gross Registered Tonnage (GRT) of the 
vessel, which is based on the total sheltered volume of the vessel 
measured in hundreds of cubic feet, and converted to gross tons 
at an equivalence of 100 cubic feet per ton.")

;;---------------------------------------
;; Parts and areas of Ships:

(subclass ShipDeck Artifact)
(documentation ShipDeck EnglishLanguage "&%ShipDeck is the class of decks on a ship, 
considered as spaces or &%Regions in which passengers and crew work, 
live, or ride, and/or in which machinery and cargo are stored on a 
&%Ship.")

(=>
	(instance ?DECK ShipDeck)
	(exists (?SHIP)
		(and
			(instance ?SHIP Ship)
			(properPart ?DECK ?SHIP))))

(subclass ShipCompartment Artifact)
(documentation ShipCompartment EnglishLanguage "A &%ShipCompartment is any fully or 
partly bounded section of a &%Ship.")

(=>
	(instance ?COMPARTMENT ShipCabin)
	(exists (?SHIP)
		(and
			(instance ?COMPARTMENT ShipCabin)
			(properPart ?COMPARTMENT ?SHIP))))

(subclass ShipCabin ShipCompartment)
(documentation ShipCabin EnglishLanguage "&%ShipCabin is the subclass of all 
&%ShipCompartments for accommodating &%Humans aboard a ship.")

(subclass ShipContainer SelfConnectedObject)
(documentation ShipContainer EnglishLanguage "&%ShipContainer is the class of specialized 
large containers designed for shipping goods aboard &%ContainerShips.")

;;----------------------------------
;;	3. Air Vehicles
; airplanes also travel on the ground, and some on water

(subclass Airplane Aircraft)
(subclass Airplane PoweredVehicle)

(documentation Airplane EnglishLanguage "&%Airplane is the subclass of &%Aircraft that 
are fixed-wing aircraft which carry their own power sources.  &%Airplane 
includes jet airplanes and propeller planes, but not gliders.")

(subclass PropellerPlane Airplane)
(subclass JetAirplane Airplane)
(subclass PropellerJet Airplane)
(subclass Rocket Aircraft)
(subclass GliderPlane Aircraft)
(subclass GliderPlane UnpoweredVehicle)



;;---------------------------------------------------------------------
;;	D. Trafficability

;;	   1. Traffic Compatibility

(instance trafficableForTrafficType BinaryPredicate)
(domain trafficableForTrafficType 1 Object)  
(domainSubclass trafficableForTrafficType 2 SelfConnectedObject)
(documentation trafficableForTrafficType EnglishLanguage 
"(&%trafficableForTrafficType ?WAY ?TYPE) means that &%Objects of ?TYPE 
can move along the &%Transitway ?WAY.")

(=>
	(and
		(trafficableForTrafficType ?PLACE ?TYPE)
		(subclass ?TYPE TransportationDevice)
		(instance ?MOVER ?TYPE))
	(capableAtLocation Transportation instrument ?MOVER ?PLACE))

(=>
	(and 
		(trafficableForTrafficType ?place ?type)
		(subclass ?type Agent)
		(instance ?mover ?type))
	(capableAtLocation Translocation agent ?mover ?place))	

(=>
	(instance ?AIRPORT Airport)
	(trafficableForTrafficType ?AIRPORT Airplane))

(instance navigableForShippingTonnage BinaryPredicate)
(domain navigableForShippingTonnage 1 WaterArea)
(domain navigableForShippingTonnage 2 PhysicalQuantity)

(documentation navigableForShippingTonnage EnglishLanguage 
"(&%navigableForShippingTonnage ?WATERWAY ?TONNAGE) means that the 
&%Waterway ?WATERWAY can be transited by vessels up to the tonnage 
?TONNAGE (in Dead Weight Tonnage).")

(=>
	(and
		(navigableForShippingTonnage ?WATERWAY (MeasureFn ?TONNAGE LongTon))
		(instance ?VESSEL WaterVehicle)
		(vesselDisplacement ?VESSEL (MeasureFn ?DWT LongTon))
		(lessThanOrEqualTo ?DWT ?TONNAGE))
	(capability (TripFn ?VESSEL) path ?WATERWAY))

(instance navigableForDraft BinaryPredicate)
(domain navigableForDraft 1 WaterArea)
(domain navigableForDraft 2 LengthMeasure)

(documentation navigableForDraft EnglishLanguage 
"(&%navigableForDraft ?WATERWAY ?DRAFT) means that the &%Waterway 
?WATERWAY can be transited by vessels up to the draft ?DRAFT.") 

(=>
  (and
    (navigableForDraft ?WATERWAY ?AMOUNT)
    (ladenDraft ?SHIP ?DRAFT)
    (greaterThan ?AMOUNT ?DRAFT))
  (capability (TripFn ?SHIP) path ?WATERWAY))	

(=>
  (and
    (navigableForDraft ?WATERWAY ?AMOUNT)
    (ladenDraft ?SHIP ?DRAFT)
    (lessThanOrEqualTo ?AMOUNT ?DRAFT))
  (not (capability (TripFn ?SHIP) path ?WATERWAY)))

(=>
  (and
    (instance ?WATERWAY Waterway)
    (depth ?OBJ ?WATERWAY (MeasureFn ?DEPTH ?UNIT))
    (instance ?UNIT UnitOfLength)
    (lessThan ?DRAFT ?DEPTH))
	(navigableForDraft ?WATERWAY (MeasureFn ?DRAFT ?UNIT)))

(instance ladenDraft BinaryPredicate)
(domain ladenDraft 1 WaterVehicle)
(domain ladenDraft 2 LengthMeasure)
(documentation ladenDraft EnglishLanguage "(&%ladenDraft ?SHIP ?AMOUNT) means that 
the &%WaterVehicle ?SHIP requires a &%waterDepth of at least ?AMOUNT 
to sail without running aground, when she is loaded at capacity.")

(instance capableAtLocation QuaternaryPredicate)
(documentation capableAtLocation EnglishLanguage 
"(&%capableAtLocation ?TYPE ?ROLE ?OBJECT ?PLACE) means that ?OBJECT 
has the ability to play the &%CaseRole ?ROLE in &%Processes of 
?EVENTTYPE that occur at ?PLACE.")
(domainSubclass capableAtLocation 1 Process)
(domain capableAtLocation 2 CaseRole)
(domain capableAtLocation 3 Object)
(domain capableAtLocation 4 Region)

(=>
  (and
    (subclass ?TYPE Process)
    (instance ?EVENT ?TYPE)
    (eventLocated ?EVENT ?REGION)
    (instance ?ROLE CaseRole)
    (instance ?OBJECT Object)
    (instance ?REGION GeographicArea)
    (?ROLE ?EVENT ?OBJECT))
  (capableAtLocation ?TYPE ?ROLE ?OBJECT ?PLACE))

;;	   2. Transitway state

;; Open/Closed attributes.  Hours of availability.  Seasonal/weather closures.

;;		a. Physical conditions

;;		b. Regulated conditions

;;----------------------------------------------------------------------

;;	E. Transit Systems and Routes

;;	   1. Physical Systems

;; Kinds of PhysicalSystems:

(documentation pathInSystem EnglishLanguage "(pathInSystem ?PATH ?SYSTEM) means that 
the &%Physical thing ?PATH consists of one or more connected routes in 
the &%PhysicalSystem ?SYSTEM.")
(instance pathInSystem BinaryPredicate)
(domain pathInSystem 1 Transitway)
(domain pathInSystem 2 TransitSystem)
(subrelation pathInSystem part)

(=>
  (pathInSystem ?P ?S)
  (or
    (routeInSystem ?P ?S)
    (exists (?R1 ?R2)
      (and
        (routeInSystem ?R1 ?S)
        (routeInSystem ?R2 ?S)
        (part ?R1 ?P)
        (part ?R2 ?P)
        (connected ?R1 ?R2)))))

(documentation routeInSystem EnglishLanguage "(routeInSystem ?PART ?SYSTEM) means that 
the &%Transitway ?PART is an established route of the 
&%TransportationSystem ?SYSTEM.")
(instance routeInSystem BinaryPredicate)
(domain routeInSystem 1 Transitway)
(domain routeInSystem 2 TransitSystem)
(subrelation routeInSystem pathInSystem)

(=>
  (and
    (subSystem ?S ?T)
    (routeInSystem ?P ?S))
  (routeInSystem ?P ?T))

(instance routeStart BinaryPredicate)
(domain routeStart 1 Region)
(domain routeStart 2 TransitSystem)
(documentation routeStart EnglishLanguage "(routeStart ?REGION ?SYSTEM) means
that within the given ?SYSTEM the given ?REGION is connected to
only one other &%Region.")

(=>
  (routeStart ?R ?TS)
  (exists (?T)
    (and
      (instance ?T Transitway)
      (connected ?R ?T)
      (systemPart ?T ?TS)
        (not
	  (exists (?T2)
      (and
        (instance ?T2 Transitway)
        (connected ?R ?T2)
        (systemPart ?T2 ?TS)
        (not
          (equal ?T ?T2))))))))

(instance routeEnd BinaryPredicate)
(domain routeEnd 1 Region)
(domain routeEnd 2 TransitSystem)
(documentation routeEnd EnglishLanguage "(routeEnd ?REGION ?SYSTEM) means
that within the given ?SYSTEM the given ?REGION is connected to
only one other &%Region.")

(=>
  (routeEnd ?R ?TS)
  (exists (?T)
    (and
      (instance ?T Transitway)
      (connected ?R ?T)
      (systemPart ?T ?TS)
      (not
        (exists (?T2)
          (and
              (instance ?T2 Transitway)
              (connected ?R ?T2)
              (systemPart ?T2 ?TS)
              (not
                (equal ?T ?T2))))))))

(=>
  (distanceOnPath ?DIST ?PATH)
  (exists (?GP)
    (and
      (instance ?GP GraphPath)
      (abstractCounterpart ?GP ?PATH))))

(=>
  (and
    (distanceOnPath ?DIST ?PATH)
    (pathInSystem ?PATH ?SYS)
    (routeStart ?START ?PATH)
    (routeEnd ?END ?PATH)
    (abstractCounterpart ?GRAPH ?SYS))
  (exists (?S ?BN ?EN)
    (and
      (subGraph ?S ?GRAPH)
      (equal ?BN (BeginNodeFn ?GRAPH))
      (equal ?EN (EndNodeFn ?GRAPH))
      (abstractCounterpart ?BN ?START)
      (abstractCounterpart ?EN ?END))))


  
  
(subclass TransitSystem PhysicalSystem)
(documentation TransitSystem EnglishLanguage "A &%TransitSystem is a system of 
interconnected &%Transitways over which some type(s) of vehicles or 
travellers may pass.  In addition to &%Transitways, &%TransitSystems 
may also include &%TransitJunctions and &%TransitTerminals.  Transit 
systems may be demarcated by where they are located (e.g., the rail 
system of &%Afghanistan), who owns or manages them (e.g., American 
Airlines &%TransitSystem of &%AirRoutes, or state highways managed by 
TexDOT), or the type of vehicles or travellers accommodated (e.g., 
the system of Santa Clara county bike trails.")

(=>
  (instance ?SYSTEM TransitSystem)
  (exists (?ROUTE)
    (and
      (instance ?ROUTE Transitway)
      (part ?ROUTE ?SYSTEM))))

(=>
  (instance ?TS TransitSystem)
  (exists (?G)
    (and
      (instance ?G Graph)
      (abstractCounterpart ?G ?TS))))

(=>
  (and
    (instance ?TS TransitSystem)
    (instance ?T Transitway)
    (abstractCounterpart ?G ?TS)
    (systemPart ?T ?TS))
  (exists (?GA)
    (and
      (instance ?GA GraphArc)
      (abstractCounterpart ?GA ?T)
      (graphPart ?GA ?G))))

(=>
  (and
    (instance ?TS TransitSystem)
    (instance ?TJ TransitwayJunction)
    (abstractCounterpart ?G ?TS)
    (systemPart ?TJ ?TS))
  (exists (?GN)
    (and
      (instance ?GN GraphNode)
      (abstractCounterpart ?GN ?TJ)
      (graphPart ?GN ?G))))

(=>
  (and
    (connects ?A ?NODE1 ?NODE2)
    (abstractCounterpart ?N1 ?NODE1)
    (abstractCounterpart ?N2 ?NODE2)
    (abstractCounterpart ?ARC ?A))
  (links ?N1 ?N2 ?ARC))

(subclass WaterTransportationSystem TransitSystem)

(=>
  (and
    (instance ?SYSTEM TransitSystem)
    (systemPart ?PART ?SYSTEM))
  (instance ?PART Transitway))

(subclass CanalSystem WaterTransportationSystem)
  
(subclass UniModalTransitSystem TransitSystem)
(documentation UniModalTransitSystem EnglishLanguage "&%UniModalTransitSystem is 
the class of &%TransitSystems that accommodate a single type of 
transportation device or method.")

(subclass MultiModalTransitSystem TransitSystem)
(documentation MultiModalTransitSystem EnglishLanguage "&%MultiModalTransitSystem is 
the class of &%TransitSystems that accommodate more than one type of 
transportation device or method.")

;;------------------------------------
;;	(E) 3. Transit Terminals 

; just use &%between, unless there's more to say about this predicate:
(instance routeBetween TernaryPredicate)
(domain routeBetween 1 Transitway)
(domain routeBetween 2 Region)
(domain routeBetween 3 Region)
(documentation routeBetween EnglishLanguage "(&%routeBetween ?ROUTE ?FROM ?TO) means 
that the &%Transitway ?ROUTE is a route between the place ?FROM and 
the place ?TO.")

(subclass TransitTerminal StationaryArtifact)
(documentation TransitTerminal EnglishLanguage "A &%TransitTerminal is a place where 
travellers or transportation devices begin or end their journeys, or 
where passengers and/or goods may be transferred.  At a terminal, 
&%TransportationDevices may be received, assigned, sent out, or 
stored.")

(subclass TrainStation TransitTerminal)

(subclass TerminalBuilding Building) 
(documentation TerminalBuilding EnglishLanguage "A &%TerminalBuilding is a &%Building 
located at a &%TransitTerminal and used in connection with its 
functions.")

(subclass TransitStop Region)
(documentation TransitStop EnglishLanguage "&%TransitStop is the subclass of places 
where a vehicle of a scheduled or common carrier makes a stop to 
discharge or take on passengers or goods.")

(subclass TransitShelter Artifact)
(documentation TransitShelter EnglishLanguage "&%TransitShelter is the class of 
structures that provide shelter for passengers waiting at a 
&%TransitStop.")

(subclass HomeGarage Building)  ;; also, garages are StorageAreas
(subclass ParkingGarage Building)  ;; also, StorageArea

(subclass ShipBerth WaterArea)   ;; also, StorageArea

(documentation ShipBerth EnglishLanguage "&%ShipBerth is the class of areas where 
a &%Ship may be moored, whether at an &%Anchorage or dock.")

(=>
	(and
		(instance ?HARBOR Harbor)
		(equipmentCount ?HARBOR ShipBerth ?NUM)
		(greaterThan ?NUM 0))
	(capability ShipBerthing path ?HARBOR))

(=>
	(and
		(instance ?PORT PortFacility)
		(capability ShipBerthing patient ?PORT))
	(exists (?HARBOR)
		(and
			(instance ?HARBOR Harbor)
			(connected ?HARBOR ?PORT)	
			(capability ShipBerthing path ?HARBOR))))

;;----------------------------------
;;	(E) 4. Transitway Junctions

(subclass TransitwayJunction Transitway)
(names "intersection" TransitwayJunction)
(names "junction" TransitwayJunction)

(documentation TransitwayJunction EnglishLanguage "&%TransitwayJunction is the class of 
regions where two or more &%Transitways meet and traffic may transfer 
from one transitway to another.")

(subclass RoadJunction TransitwayJunction)
(subclass RoadJunction Roadway)

(documentation RoadJunction EnglishLanguage "&%RoadJunction is the subclass of 
&%TransitwayJunctions where two or more &%Roadways come together.")

(subclass RailJunction TransitwayJunction)
(subclass RailJunction Railway)

(documentation RailJunction EnglishLanguage "&%RailJunction is the subclass of 
&%TransitwayJunctions where two or more &%Railway lines come together.")

(subclass WaterJunction TransitwayJunction)
(subclass WaterJunction Waterway)

(documentation WaterJunction EnglishLanguage "&%WaterJunction is the subclass of 
&%TransitwayJunctions where two or more &%Waterways come together.")  

;;------------------------------------
;;	(E) 5. Transit Routes

(subclass TransitRoute Region)

(documentation TransitRoute EnglishLanguage "&%TransitRoute is the class of 
&%Regions that are paths for &%Motion from one place to another.")

(subclass AirRoute TransitRoute)

(documentation AirRoute EnglishLanguage "An &%AirRoute is a region of air space that 
can be travelled between points by an air &%TransportationDevice.")

;;---------------------------------------------------------------------
;;	F. Trips

(subclass Trip Motion)

(documentation Trip EnglishLanguage "&%Trip is the subclass of &%Motions along a 
&%TransitRoute or &%Transitway.")

(subclass IntermodalTrip Trip)

(documentation IntermodalTrip EnglishLanguage "&%IntermodalTrip is the class of 
trips in which more than one mode (road, rail, sea, or air) of 
&%Transportation is used.  That is, there are at least two 
&%subProcesses of the trip that use different modes of 
&%TransportationDevice. ")

(subclass ShipBerthing Translocation)

(documentation ShipBerthing EnglishLanguage "&%ShipBerthing is the class of 
&%Translocation processes in which a vessel is brought to a 
mooring, at dockside or anchorage.") 

(instance ShipBerthingFn UnaryFunction)
(domain ShipBerthingFn 1 Ship)
(rangeSubclass ShipBerthingFn ShipBerthing)

(documentation ShipBerthingFn EnglishLanguage "(ShipBerthingFn ?SHIP) denotes the 
class of &%ShipBerthings of an individual &%WaterVehicle ?SHIP.")

;;---------------------------------------------------------------------

;;	G. Transitway Capacity

(instance transitwayCapacityCount TernaryPredicate)
(domain transitwayCapacityCount 1 Transitway)
(domainSubclass transitwayCapacityCount 2 SelfConnectedObject)
(domain transitwayCapacityCount 3 NonnegativeInteger)

(documentation transitwayCapacityCount EnglishLanguage 
"(&%transitwayCapacityCount ?WAY ?TYPE ?NUMBER) means that the 
&%Transitway ?WAY can accommodate a maximum of ?NUMBER items of ?TYPE 
at any one time.")

(instance transitwayCapacityRate TernaryPredicate)
(domain transitwayCapacityRate 1 Transitway)
(domainSubclass transitwayCapacityRate 2 SelfConnectedObject)
(domain transitwayCapacityRate 3 FunctionQuantity)

(documentation transitwayCapacityRate EnglishLanguage 
"(&%transitwayCapacityRate ?WAY ?TYPE ?RATE) means that the 
&%Transitway WAY can transit items of ?TYPE at the maximum 
&%FunctionQuantity ?RATE.  For example, 
(&%transitwayCapacityRate &%SFBayBridgeWestbound &%Automobile 500).")  

;;---------------------------------------------------------------------

;;	H. Transitway Obstacles

;; KJN: Moving this to MILO to remove dependencies
;;(subclass TransitwayObstacle Object)
;;(documentation TransitwayObstacle EnglishLanguage "&%TransitwayObstacle is the general 
;;class of &%Objects that can act as obstacles to &%Motion along a 
;;&%Transitway.")

(subclass Dam TransitwayObstacle)

;; KJN: Moving to MILO to remove dependencies
;;(subclass Door TransitwayObstacle)
;;(subclass Door Device)

(subclass CanalLockGate TransitwayObstacle)
(subclass CanalLockGate Device)

(subclass TrafficLight Device) ;; a TransitObstacle when Red (and obeyed).
;; Treat under TrafficControlDevice
(subclass TollBooth Building)

;; Dam, Lock
;; Dam presents an obstacle to transit.  Some are bypassed by locks.
;; Lock is a transitway, part of a larger transitway.  Doors are temporary obstacles. Never has both ends open at the same time.

;; impact if damaged - represent "device failures" and effects. 
;; deviceFailureEffect(on area)
;; for a dam across a river w/adjacent downstream valley:
;; (deviceFailureEffect ?device Flood ?valley)
;; implies a flood occurs in/"on" the ?valley.
;; defer for later work.

;;---------------------------------------------------------------------

;;	I. Traffic Regulation

;;	1. Transit Authority

(subclass TransportationAuthority Organization)
(documentation TransportationAuthority EnglishLanguage 
"&%TransportationAuthority is the class of &%Organizations that are 
responsible for one or more systems of transportation, usually within 
a particular &%GeopoliticalArea.")

(subclass VehicleRegistration ContentBearingObject)  ;; official document
(documentation VehicleRegistration EnglishLanguage "&%VehicleRegistration is the class 
of official documents containing information about a vehicle's ownership 
and identifying characteristics, as required by the appropriate authority 
for the type and location of individual vehicles.")

(instance FederalAviationAdministration GovernmentOrganization)
(instance FederalAviationAdministration TransportationAuthority)
(acronym "FAA" FederalAviationAdministration)
(termFormat EnglishLanguage FederalAviationAdministration "Federal Aviation Administration")
 
(instance InternationalAirTransportAssociation InternationalOrganization)
(instance InternationalAirTransportAssociation TransportationAuthority)
(acronym "IATA" InternationalAirTransportAssociation)
(termFormat EnglishLanguage InternationalAirTransportAssociation "International Air Transport Association")

;; 	2. Transit Control Systems

; AirTrafficControl

;;	3. Transit Control Devices

; TrafficLight
; TrafficGate

;;	4. Tolls or Usage Fees

;;  5.  Transportation Standards

(subclass AirlineCodeMap CodeMap)
(documentation AirlineCodeMap EnglishLanguage "&%AirlineCodeMap denotes the &%SymbolicString
used by different aviation organizations to identify &%Airline")
(termFormat EnglishLanguage AirlineCodeMap "airline code map")

(=>
  (and
    (instance ?CM AirlineCodeMap)
    (codeMapping ?CM ?STR ?AIR))
  (and
    (instance ?AIR Airline)
    (represents ?STR ?AIR)))

(instance IATAAirlineCode CodeMap)
(documentation IATAAirlineCode EnglishLanguage "The 2-character tag given to an &%Airline by the 
&%InternationalAirTransportAssociation to represent that &%Airline at any &%Airport")    
(termFormat EnglishLanguage IATAAirlineCode "IATA airline code")

(=>
  (codeMapping IATAAirlineCode ?STR ?AIR)
  (member ?AIR InternationalAirTransportAssociation))

(=>
  (codeMapping IATAAirlineCode ?STR ?AIR)
  (equal 2 (StringLengthFn ?STR)))
   
(instance IACOAirlineCode CodeMap)
(documentation IACOAirlineCode EnglishLanguage "The 3-character tag given to an &%Airline by the 
 &%InternationalCivilAviationOrganization to represent that &%Airline at any &%Airport")
(termFormat EnglishLanguage IACOAirlineCode "IACO airline code")

(=>
  (codeMapping IACOAirlineCode ?STR ?AIR)
  (member ?AIR InternationalCivilAviationOrganization))

(=>
  (codeMapping IACOAirlineCode ?STR ?AIR)
  (equal 3 (StringLengthFn ?STR)))

(subclass AOCnumber SymbolicString)
(documentation AOCnumber EnglishLanguage "The certification number that signifies an 
&%Airline has recieved an Air Operator Certification, allowing the airline to use 
aircraft for commercial purposes.")
(termFormat EnglishLanguage AOCnumber "AOC number")

(=>
  (instance ?AOC AOCnumber)
  (equal 8 (StringLengthFn ?AOC)))
  
(=>
  (instance ?AOC AOCnumber)
  (exists (?G ?AIRLINE)
    (and
      (instance ?G Giving)
      (agent ?G FederalAviationAdministration)
      (destination ?G ?AIRLINE)
      (patient ?G ?AOC))))
      
(=>
  (and
    (instance ?AOC AOCnumber)
    (instance ?AIRLINE Airline)
    (possesses ?AIRLINE ?AOC))
  (confersRight
    (exists (?AIR)
      (and
        (instance ?AIR AirTransportationService)
        (serviceProvider ?AIR ?AIRLINE))) 
    FederalAviationAdministration ?AIRLINE))

  
;;---------------------------------------------------------------------

;;	J. Transportation Businesses

;; 	   1. Business Types

(subclass CommonCarrier TransportationCompany)
(documentation CommonCarrier EnglishLanguage "&%CommonCarrier is the subclass of 
&%TransportationCompany whose instances must offer services to all 
customers.  Contrast with &%ContractCarrier.")

(subclass ContractCarrier TransportationCompany)
(documentation ContractCarrier EnglishLanguage "&%ContractCarrier is the subclass of 
&%TransportationCompany whose instances offer services to only one  
customer, under contract.  Contrast with &%CommonCarrier.")

(disjoint CommonCarrier ContractCarrier)

(subclass RailroadCompany TransportationCompany)
(documentation RailroadCompany EnglishLanguage "Any &%TransportationCompany whose services 
include &%Transportation by &%Train.")

(=>
   (instance ?COMPANY RailroadCompany)
   (exists (?SERVICE ?TRAIN)
      (and
         (instance ?SERVICE CommercialService)
         (agent ?SERVICE ?COMPANY)
         (instance ?SERVICE Transportation)
         (instrument ?SERVICE ?TRAIN)
         (instance ?TRAIN Train))))

(subclass ClassIRailroad  RailroadCompany)
(documentation ClassIRailroad EnglishLanguage "&%ClassIRailroad is the 
subclass of &%RailroadCompany whose instances have an 
average annual gross revenue above $256.4 million 
&%UnitedStatesDollars.")

(subclass ClassIIRailroad  RailroadCompany)
(documentation ClassIIRailroad EnglishLanguage "&%ClassIIRailroad is the 
subclass of &%RailroadCompany whose instances have an 
average annual gross revenue between $20.5 and $256.4 million 
&%UnitedStatesDollars.")

(subclass ClassIIIRailroad  RailroadCompany)
(documentation ClassIIIRailroad EnglishLanguage "&%ClassIIIRailroad is the 
subclass of &%RailroadCompany whose instances have an 
average annual gross revenue below $20.5 million 
&%UnitedStatesDollars.")

;; 		2. Personnel 

;; 'occupiesPosition': Human x Position x Organization, is defined in Merge.txt
;;	2. Transport Operators, Passengers, and Cargo

(instance passengerCapacityMaxNumber BinaryPredicate)
(domain passengerCapacityMaxNumber 1 TransportationDevice)
(domain passengerCapacityMaxNumber 2 Number)

(documentation passengerCapacityMaxNumber EnglishLanguage 
"(&%passengerCapacityMaxNumber ?TRANSPORT ?NUMBER) means that the 
&%TransportationDevice ?TRANSPORT has a safe carrying capacity for ?NUMBER 
of passengers.")

(subclass ShipCrew Organization)
(documentation ShipCrew EnglishLanguage "A &%ShipCrew is an &%Organization of people 
who operate a &%Ship, &%Plane, &%Train, or other transportation vehicle.")

;; FUNCTION:
(instance ShipCrewFn UnaryFunction)
(documentation ShipCrewFn EnglishLanguage "(&%ShipCrewFn ?BOAT) denotes the 
&%Organization consisting of the people charged with operating 
the &%WaterVehicle ?BOAT.")

(domain ShipCrewFn 1 WaterVehicle)
(range ShipCrewFn Group)

;; KJN: redundant as ShipCaptain is already a subAttribute of Sailor in MILO
;;(instance ShipCaptain Position)
(instance FirstMate Position)
(instance ChiefSteward Position)
(instance RadioOperator Position)
(=>
	(attribute ?PERSON RadioOperator)
	(hasSkill ?PERSON (OperatingFn CommunicationRadio)))

;; KJN: Used a lot in MILO so will be transferring it there.  It seems to be applicable
;; for other devices too, not only Transportation ones.
;;(instance OperatingFn UnaryFunction)
;;(documentation OperatingFn EnglishLanguage "(&%OperatingFn ?DEVICE) denotes the class 
;;of events in which a &%Device of type ?device is operated.")

;;(domain OperatingFn 1 Device)
;;(rangeSubclass OperatingFn Process)

(subclass Airline TransportationCompany)
(documentation Airline EnglishLanguage "An Airline is a &%TransportationCompany that 
specializes in providing &%AirTransportation")
(termFormat EnglishLanguage Airline "Airline")
(=>
  (instance ?AIRLINE Airline)
  (attribute ?AIRLINE AirTransportationIndustry))

(=>
  (instance ?AIRLINE Airline)
  (hasPurpose ?AIRLINE
    (exists (?AIR)
      (and
        (instance ?AIR AirTransportationService)
        (serviceProvider ?AIR ?AIRLINE)))))
        
;; KJN: Comment out until Biography.kif is promoted to production        
;;(=>
;;  (instance ?AIRLINE Airline)
;;  (exists (?PILOT)
;;    (and
;;      (instance ?PILOT Human)
;;      (attribute ?PILOT Pilot)
;;      (employs ?AIRLINE ?PILOT))))
      
;; Another way of expressing that an Airline hires Pilots is to use (occupiesPosition 
;; ?PILOT Pilot ?AIRLINE) instead of (employs ?AIRLINE ?PILOT)
(=>
  (instance ?AIRLINE Airline)
  (exists (?FLEET ?AIRCRAFT)
    (and
      (instance ?FLEET Fleet)
      (possesses ?AIRLINE ?FLEET)
      (instance ?AIRCRAFT Aircraft)
      (member ?AIRCRAFT ?FLEET))))
      
      
;;   3.  Transportation Services

(subclass TransportationService ServiceProcess)
(documentation TransportationService EnglishLanguage "&%TransportationService refers to
how an agent that possesses some kind of vehicle transports people around")
(termFormat EnglishLanguage TransportationService "transportation service")        
        
(=>
  (instance ?SVC TransportationService)
  (exists (?VEHICLE ?AGENT ?TRANS ?CUST)
    (and
      (agent ?SVC ?AGENT)
      (possesses ?AGENT ?VEHICLE)
      (customer ?CUST ?AGENT)
      (instance ?VEHICLE Vehicle)
      (instance ?TRANS Transportation)
      (agent ?TRANS ?AGENT)
      (patient ?TRANS ?CUST)
      (instrument ?TRANS ?VEHICLE)
      (subProcess ?TRANS ?SVC))))

(subclass AirTransportationService TransportationService)
(documentation AirTransportationService EnglishLanguage "A &%TransportationService 
provided by an &%Agent that involves flying a customer from one &%Airport to another 
&%Airport.")
(termFormat EnglishLanguage AirTransportationService "Air Transportation Service")
(=>
  (instance ?SERVICE AirTransportationService)
  (exists (?AIRCRAFT ?AIR)
    (and
      (instance ?AIR AirTransportation)
      (subProcess ?AIR ?SERVICE)
      (instrument ?AIR ?AIRCRAFT)
      (instance ?AIRCRAFT Aircraft))))
      
(subclass LandTransportationService TransportationService)
(documentation LandTransportationService EnglishLanguage "A &%TransportationService 
provided by an &%Agent that involves &%LandTransportation")
(termFormat EnglishLanguage LandTransportationService "Land Transportation Service")
(=>
  (instance ?SERVICE LandTransportationService)
  (exists (?LAND ?VEHICLE)
    (and
      (instance ?LAND LandTransportation)
      (instance ?VEHICLE LandVehicle)
      (instrument ?LAND ?VEHICLE)
      (subProcess ?LAND ?SERVICE))))
            
(subclass WaterTransportationService TransportationService)
(documentation WaterTransportationService EnglishLanguage "A &%TransportationService 
that involves &%WaterTransportation")
(termFormat EnglishLanguage WaterTransportationService "Water Transportation Service")
(=>
  (instance ?SERVICE WaterTransportationService)
  (exists (?WATER ?VEHICLE)
    (and
      (instance ?WATER WaterTransportation)
      (instance ?VEHICLE WaterVehicle)
      (instrument ?WATER ?VEHICLE)
      (subProcess ?WATER ?SERVICE))))

(instance providesDestination BinaryPredicate)
(domain providesDestination 1 TransportationCompany)
(domain providesDestination 2 Region)
(documentation providesDestination EnglishLanguage "(providesDestination ?TC ?REG) means 
&%TransportationCompany, ?TC, provides possible &%Transportation to &%Region ?REG.")
(termFormat EnglishLanguage providesDestination "provides destination")

(=>
  (providesDestination ?TC ?REG)
  (modalAttribute
    (exists (?SVC)
      (and
        (instance ?SVC TransportationService)
        (serviceProvider ?SVC ?TC)
        (destination ?SVC ?REG))) Possibility))
      
;;========================================================================
