SMINK001

From Public Domain Knowledge Bank
Revision as of 21:03, 18 October 2016 by DavidWhitten (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
http://ontolog.cim3.net/file/work/ontology/protege-SKIF/samin/SAMIN001.TXT
;; ================================================
;;   SMINK001 An ontology derived from
;;      SUMO (Suggested Upper Merged Ontology) (Teknowledge)
;;        (from merge.txt version 1.566 for Ontolog ontology)
;;      MILO (MId-LevelOntology)  (Teknowledge)
;;       and Invoices -- an ontology developed by the Ontolog
;;           study group
;;      file version samin001.txt -- modified for import into Protege
;;           by P. Cassidy January 2004
;;      Last edit January 21, 2004
;; ================================================

;; This is the source file for the SUMO (Suggested Upper Merged Ontology),
;; an ontology that was developed within the SUO Working Group by merging
;; the SUO "candidate content" sources and refining and extending this content on
;; the basis of various knowledge engineering projects and input from the SUO
;; Working Group.

;; The SUMO incorporates elements of John Sowa's upper ontology (as described at
;; http://www.bestweb.net/~sowa/ontology/toplevel.htm and in Chapter 2 of his
;; book _Knowledge Representation_, Brooks/Cole, 2000), Russell and Norvig's
;; ontology, PSL (Process Specification Language), Casati and Varzi's theory of
;; holes, Allen's temporal axioms, the relatively noncontroversial elements of
;; Smith's and Guarino's respective mereotopologies, the KIF formalization of the
;; CPR (Core Plan Representation), the ontologies available on the Ontolingua
;; server maintained by Stanford University's Knowledge Systems Laboratory, the
;; ontologies developed by ITBM-CNR, some of the spatial relations from an
;; unpublished paper by Iris Tommelein and Anil Gupta entitled "Conceptual
;; Structures for Spatial Reasoning", and a "Structural Ontology" proposed by
;; David Whitten and substantially revised and extended by Chris Menzel.
;; Note that some of the subclasses of 'Process' in the SUMO were originally
;; inspired by some of the verb classes from the second part of Beth Levin's book
;; "English Verb Classes and Alternations:  A Preliminary Investigation."

;; The knowledge representation language in which the SUMO is expressed is SUO-KIF,
;; which stands for "Standard Upper Ontology - Knowledge Interchange Format".  SUO-KIF
;; is a simplified form of the popular KIF knowledge representation language.  A
;; specification of SUO-KIF can be found at:  http://suo.ieee.org/suo-kif.html.  It
;; should be noted that some of the axioms in the SUMO make use of row variables
;; (indicated with a "@" prefix).  Such variables are not currently part of the SUO-
;; KIF specification, but they simplify matters significantly in some cases.  Details
;; about row variables can be found in the following paper:
;; http://reliant.teknowledge.com/IJCAI01/HayesMenzel-SKIF-IJCAI2001.pdf.

;; The SUMO is a modular ontology.  That is, the ontology is divided into
;; self-contained subontologies.  Each subontology is indicated by a section
;; header, and the dependencies between the subontologies are specified with
;; statements of the form ";; INCLUDES '<SUBONTOLOGY>'".  These statements are
;; found at the beginning of each section.  The dependencies between the
;; various subontologies can also be graphed informally as follows:
;;
;;                             STRUCTURAL ONTOLOGY
;;                                      +
;;                                      |
;;                                      |
;;                                      +
;;                                 BASE ONTOLOGY
;;                                 /   |   |   \
;;                                /    |   |    \
;;                               /     |   |     \
;;                              /      |   |      \
;;                             /       |   |       \
;;                            +        +   +        +
;;             SET/CLASS THEORY   NUMERIC  TEMPORAL  MEREOTOPOLOGY
;;                               /     |        |           |
;;                              /      |        |           |
;;                             /       |        |           |
;;                            +        +        +           +
;;                        GRAPH   MEASURE   PROCESSES +--+ OBJECTS
;;                                              +           +
;;                                               \         /
;;                                                \       /
;;                                                 \     /
;;                                                  +   +
;;                                                 QUALITIES
;;
;;
;; Note that the "+" sign at the end of an arc indicates the direction of
;; dependency - the node near the sign includes the subontology at the other
;; end of the arc.  Note too that in some cases the dependency is
;; bidirectional.  Separating ontologies in cases like these is useful when
;; their respective topics can be cleanly differentiated.

;; The SUMO is copyrighted by Teknowledge (c) 2002.  It is released under the
;; GNU Public License <http://www.gnu.org/copyleft/gpl.html>.  Users of this
;; code also consent, by use of this material, to credit Teknowledge in any writings,
;; briefings, publications, presentations, or other representations of any code
;; or other product which incorporates, builds on, or uses this material.


;; <module>STRUCTURAL_ONTOLOGY</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;   STRUCTURAL ONTOLOGY   ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'BASE ONTOLOGY'

;; The Structural Ontology consists of definitions of certain syntactic
;; abbreviations that can be both heuristically useful and computationally
;; advantageous.

(instance instance BinaryPredicate)
(domain instance 1 Entity)
(domain instance 2 SetOrClass)
(documentation instance "An object is an &%instance of a &%SetOrClass if
it is included in that &%SetOrClass.  An individual may be an instance of many
classes, some of which may be subclasses of others.  Thus, there is no
assumption in the meaning of &%instance about specificity or uniqueness.")

(subrelation immediateInstance instance)
(instance immediateInstance AsymmetricRelation)
(instance immediateInstance IntransitiveRelation)
(documentation immediateInstance "An object is an &%immediateInstance of
a &%SetOrClass if it is an instance of the &%SetOrClass and there does not exist a
subclass of &%SetOrClass such that it is an instance of the subclass.")

(=>
   (immediateInstance ?ENTITY ?CLASS)
   (not (exists (?SUBCLASS)
      (and
         (subclass ?SUBCLASS ?CLASS)
         (instance ?ENTITY ?SUBCLASS)))))

(instance inverse BinaryPredicate)
(instance inverse IrreflexiveRelation)
(instance inverse IntransitiveRelation)
(instance inverse SymmetricRelation)
(domain inverse 1 BinaryRelation)
(domain inverse 2 BinaryRelation)
(documentation inverse "The inverse of a &%BinaryRelation is a relation
in which all the tuples of the original relation are reversed.  In
other words, one &%BinaryRelation is the inverse of another if they are
equivalent when their arguments are swapped.")

(=>
   (inverse ?REL1 ?REL2)
   (forall (?INST1 ?INST2)
      (<=>
         (holds ?REL1 ?INST1 ?INST2)
         (holds ?REL2 ?INST2 ?INST1))))

(instance subclass BinaryPredicate)
(instance subclass PartialOrderingRelation)
(domain subclass 1 SetOrClass)
(domain subclass 2 SetOrClass)
(documentation subclass "(&%subclass ?CLASS1 ?CLASS2) means that ?CLASS1 is
a subclass of ?CLASS2, i.e. every instance of ?CLASS1 is also an instance of
?CLASS2.  A class may have multiple superclasses and subclasses.")

(<=>
   (subclass ?SUBCLASS ?CLASS)
   (and
      (instance ?SUBCLASS SetOrClass)
      (instance ?CLASS SetOrClass)
      (forall (?INST)
         (=>
            (instance ?INST ?SUBCLASS)
            (instance ?INST ?CLASS)))))

(subrelation immediateSubclass subclass)
(instance immediateSubclass AsymmetricRelation)
(instance immediateSubclass IntransitiveRelation)
(documentation immediateSubclass "A &%SetOrClass ?CLASS1 is an &%immediateSubclass
of another &%SetOrClass ?CLASS2 just in case ?CLASS1 is a subclass of ?CLASS2 and
there is no other subclass of ?CLASS2 such that ?CLASS1 is also a subclass of it.")

(=>
   (immediateSubclass ?CLASS1 ?CLASS2)
   (not (exists (?CLASS3)
      (and
         (subclass ?CLASS3 ?CLASS2)
         (subclass ?CLASS1 ?CLASS3)
         (not (equal ?CLASS2 ?CLASS3))
         (not (equal ?CLASS1 ?CLASS3))))))

(instance subrelation BinaryPredicate)
(instance subrelation PartialOrderingRelation)
(domain subrelation 1 Relation)
(domain subrelation 2 Relation)
(documentation subrelation "(&%subrelation ?REL1 ?REL2) means that
every tuple of ?REL1 is also a tuple of ?REL2.  In other words, if
the &%Relation ?REL1 holds for some arguments arg_1, arg_2, ... arg_n,
then the &%Relation ?REL2 holds for the same arguments.  A consequence
of this is that a &%Relation and its subrelations must have the same
&%valence. In CycL, &%subrelation is called #$genlPreds.")

(=>
   (and
      (subrelation ?PRED1 ?PRED2)
      (valence ?PRED1 ?NUMBER))
   (valence ?PRED2 ?NUMBER))

(=>
   (and
      (subrelation ?PRED1 ?PRED2)
      (domain ?PRED2 ?NUMBER ?CLASS1))
   (domain ?PRED1 ?NUMBER ?CLASS1))

(=>
   (and
      (subrelation ?REL1 ?REL2)
      (holds ?REL1 @ROW))
   (holds ?REL2 @ROW))

(=>
   (and
      (subrelation ?PRED1 ?PRED2)
      (instance ?PRED2 ?CLASS)
      (instance ?CLASS InheritableRelation))
   (instance ?PRED1 ?CLASS))

(instance domain TernaryPredicate)
(domain domain 1 Relation)
(domain domain 2 PositiveInteger)
(domain domain 3 SetOrClass)
(documentation domain "Provides a computationally and heuristically
convenient mechanism for declaring the argument types of a given relation.
The formula (&%domain ?REL ?INT ?CLASS) means that the ?INT'th element of each
tuple in the relation ?REL must be an instance of ?CLASS.  Specifying argument
types is very helpful in maintaining ontologies.  Representation systems can
use these specifications to classify terms and check integrity constraints.
If the restriction on the argument type of a &%Relation is not captured by a
&%SetOrClass already defined in the ontology, one can specify a &%SetOrClass
compositionally with the functions &%UnionFn, &%IntersectionFn, etc.")

(=>
   (and
      (domain ?REL ?NUMBER ?CLASS1)
      (domain ?REL ?NUMBER ?CLASS2))
   (or
      (subclass ?CLASS1 ?CLASS2)
      (subclass ?CLASS2 ?CLASS1)))

(instance domainSubclass TernaryPredicate)
(domain domainSubclass 1 Relation)
(domain domainSubclass 2 PositiveInteger)
(domain domainSubclass 3 SetOrClass)
(documentation domainSubclass "&%Predicate used to specify argument
type restrictions of &%Predicates.  The formula (&%domainSubclass
?REL ?INT ?CLASS) means that the ?INT'th element of each tuple in the
relation ?REL must be a subclass of ?CLASS.")

(=>
   (and
      (subrelation ?REL1 ?REL2)
      (domainSubclass ?REL2 ?NUMBER ?CLASS1))
   (domainSubclass ?REL1 ?NUMBER ?CLASS1))

(=>
   (and
      (domainSubclass ?REL ?NUMBER ?CLASS1)
      (domainSubclass ?REL ?NUMBER ?CLASS2))
   (or
      (subclass ?CLASS1 ?CLASS2)
      (subclass ?CLASS2 ?CLASS1)))

(instance equal BinaryPredicate)
(instance equal EquivalenceRelation)
(instance equal RelationExtendedToQuantities)
(domain equal 1 Entity)
(domain equal 2 Entity)
(documentation equal "(equal ?ENTITY1 ?ENTITY2) is true just in case
?ENTITY1 is identical with ?ENTITY2.")

(=>
   (equal ?THING1 ?THING2)
   (forall (?ATTR)
      (<=>
         (property ?THING1 ?ATTR)
         (property ?THING2 ?ATTR))))

(=>
   (equal ?ATTR1 ?ATTR2)
   (forall (?THING)
      (<=>
         (property ?THING ?ATTR1)
         (property ?THING ?ATTR2))))

(=>
   (equal ?THING1 ?THING2)
   (forall (?CLASS)
      (<=>
         (instance ?THING1 ?CLASS)
         (instance ?THING2 ?CLASS))))

(=>
   (equal ?CLASS1 ?CLASS2)
   (forall (?THING)
      (<=>
         (instance ?THING ?CLASS1)
         (instance ?THING ?CLASS2))))

(=>
   (equal ?REL1 ?REL2)
   (forall (@ROW)
      (<=>
         (holds ?REL1 @ROW)
         (holds ?REL2 @ROW))))

(=>
   (equal (ListFn @ROW1) (ListFn @ROW2))
      (<=>
         (holds @ROW1)
         (holds @ROW2)))

(=>
   (equal ?LIST1 ?LIST2)
      (=>
         (and
            (equal ?LIST1 (ListFn @ROW1))
            (equal ?LIST2 (ListFn @ROW2)))
         (forall (?NUMBER)
            (equal (ListOrderFn (ListFn @ROW1) ?NUMBER) (ListOrderFn (ListFn @ROW2) ?NUMBER)))))

(instance range BinaryPredicate)
(instance range AsymmetricRelation)
(domain range 1 Function)
(domain range 2 SetOrClass)
(documentation range "Gives the range of a function.  In other words,
(&%range ?FUNCTION ?CLASS) means that all of the values assigned by
?FUNCTION are &%instances of ?CLASS.")

(=>
   (and
      (range ?FUNCTION ?CLASS)
      (equal (AssignmentFn ?FUNCTION @ROW) ?VALUE))
   (instance ?VALUE ?CLASS))

(=>
   (and
      (subrelation ?REL1 ?REL2)
      (range ?REL2 ?CLASS1))
   (range ?REL1 ?CLASS1))

(=>
   (and
      (range ?REL ?CLASS1)
      (range ?REL ?CLASS2))
   (or
      (subclass ?CLASS1 ?CLASS2)
      (subclass ?CLASS2 ?CLASS1)))

(instance rangeSubclass BinaryPredicate)
(instance rangeSubclass AsymmetricRelation)
(domain rangeSubclass 1 Function)
(domainSubclass rangeSubclass 2 SetOrClass)
(documentation rangeSubclass "(&%rangeSubclass ?FUNCTION ?CLASS) means that
all of the values assigned by ?FUNCTION are &%subclasses of ?CLASS.")

(=>
   (and
      (rangeSubclass ?FUNCTION ?CLASS)
      (equal (AssignmentFn ?FUNCTION @ROW) ?VALUE))
   (subclass ?VALUE ?CLASS))

(=>
   (and
      (subrelation ?REL1 ?REL2)
      (rangeSubclass ?REL2 ?CLASS1))
   (rangeSubclass ?REL1 ?CLASS1))

(=>
   (and
      (rangeSubclass ?REL ?CLASS1)
      (rangeSubclass ?REL ?CLASS2))
   (or
      (subclass ?CLASS1 ?CLASS2)
      (subclass ?CLASS2 ?CLASS1)))

(instance valence BinaryPredicate)
(instance valence AsymmetricRelation)
(instance valence SingleValuedRelation)
(domain valence 1 Relation)
(domain valence 2 PositiveInteger)
(documentation valence "Specifies the number of arguments that a
relation can take.  If a relation does not have a fixed number of
arguments, it does not have a valence and it is an instance of
&%VariableArityRelation.  For example, &%holds is a
&%VariableArityRelation.")

(instance documentation BinaryPredicate)
(instance documentation AsymmetricRelation)
(domain documentation 1 Entity)
(domain documentation 2 SymbolicString)
(documentation documentation "A relation between objects in the domain
of discourse and strings of natural language text.  The domain of
&%documentation is not constants (names), but the objects themselves.
This means that one does not quote the names when associating them with
their documentation.")

(instance disjoint BinaryPredicate)
(instance disjoint SymmetricRelation)
(domain disjoint 1 SetOrClass)
(domain disjoint 2 SetOrClass)
(documentation disjoint "&%Classes are &%disjoint only if they share no
instances, i.e. just in case the result of applying &%IntersectionFn to
them is empty.")

(<=>
   (disjoint ?CLASS1 ?CLASS2)
   (and
      (instance ?CLASS1 NonNullSet)
      (instance ?CLASS2 NonNullSet)
      (forall (?INST)
         (not
            (and
               (instance ?INST ?CLASS1)
               (instance ?INST ?CLASS2))))))

(instance disjointRelation Predicate)
(instance disjointRelation VariableArityRelation)
(relatedInternalConcept disjointRelation disjoint)
(domain disjointRelation 1 Relation)
(documentation disjointRelation "This predicate relates any number of &%Relations.  (&%disjointRelation @ROW) means that any two relations in @ROW have no tuples in common.  As a consequence, the intersection of all of the relations in @ROW is the null set.")

(=>
   (and
      (disjointRelation @ROW)
      (inList ?REL (ListFn @ROW)))
   (instance ?REL Relation))

(=>
   (and
      (disjointRelation @ROW)
      (inList ?REL1 (ListFn @ROW))
      (inList ?REL2 (ListFn @ROW))
      (valence ?REL1 ?NUMBER))
   (valence ?REL2 ?NUMBER))

(=>
   (and
      (domain ?REL1 ?NUMBER ?CLASS1)
      (domain ?REL2 ?NUMBER ?CLASS2)
      (disjoint ?CLASS1 ?CLASS2))
   (disjointRelation ?REL1 ?REL2))

(=>
   (and
      (domainSubclass ?REL1 ?NUMBER ?CLASS1)
      (domainSubclass ?REL2 ?NUMBER ?CLASS2)
      (disjoint ?CLASS1 ?CLASS2))
   (disjointRelation ?REL1 ?REL2))

(=>
   (and
      (range ?REL1 ?CLASS1)
      (range ?REL2 ?CLASS2)
      (disjoint ?CLASS1 ?CLASS2))
   (disjointRelation ?REL1 ?REL2))

(=>
   (and
      (rangeSubclass ?REL1 ?CLASS1)
      (rangeSubclass ?REL2 ?CLASS2)
      (disjoint ?CLASS1 ?CLASS2))
   (disjointRelation ?REL1 ?REL2))

(=>
   (and
      (disjointRelation @ROW1)
      (inList ?REL1 (ListFn @ROW1))
      (inList ?REL2 (ListFn @ROW1))
      (not (equal ?REL1 ?REL2))
      (holds ?REL1 @ROW2))
   (not (holds ?REL2 @ROW2)))

;; the domain 1 statement was added to contraryAttribute for the 
;; Protege conversion 1-16-04

(instance contraryAttribute Predicate)
(instance contraryAttribute VariableArityRelation)
(domain contraryAttribute 1 Attribute)
(domain contraryAttribute 2 Attribute)
;; domain 2 added 1/16/04 for Protege alignment
(documentation contraryAttribute "A &%contraryAttribute is a set of &%Attributes
such that something can not simultaneously have more than one of these &%Attributes.
For example, (&%contraryAttribute &%Pliable &%Rigid) means that nothing can be both
&%Pliable and &%Rigid.")

(=>
   (contraryAttribute @ROW)
   (=>
      (inList ?ELEMENT (ListFn @ROW))
      (instance ?ELEMENT Attribute)))

(=>
   (contraryAttribute @ROW)
   (forall (?ATTR1 ?ATTR2)
      (=>
         (and
            (equal ?ATTR1 (ListOrderFn (ListFn @ROW) ?NUMBER1))
            (equal ?ATTR2 (ListOrderFn (ListFn @ROW) ?NUMBER2))
            (not (equal ?NUMBER1 ?NUMBER2)))
         (=>
            (property ?OBJ ?ATTR1)
            (not (property ?OBJ ?ATTR2))))))

(instance exhaustiveAttribute Predicate)
(instance exhaustiveAttribute VariableArityRelation)
(domainSubclass exhaustiveAttribute 1 Attribute)
(documentation exhaustiveAttribute "This predicate relates a &%Class to a
set of &%Attributes, and it means that the elements of this set exhaust the
instances of the &%Class.  For example, (&%exhaustiveAttribute &%PhysicalState
&%Solid &%Liquid &%Gas) means that there are only three instances of the class
&%PhysicalState, viz. &%Solid, &%Liquid, and &%Gas.")

(=>
   (exhaustiveAttribute ?CLASS @ROW)
   (=>
      (inList ?ATTR (ListFn @ROW))
      (instance ?ATTR Attribute)))

(=>
   (exhaustiveAttribute ?CLASS @ROW)
   (forall (?OBJ)
      (=>
         (instance ?ATTR1 ?CLASS)
         (exists (?ATTR2)
            (and
               (inList ?ATTR2 (ListFn @ROW))
               (equal ?ATTR1 ?ATTR2))))))

(instance exhaustiveDecomposition Predicate)
(instance exhaustiveDecomposition VariableArityRelation)
(domain exhaustiveDecomposition 1 Class)
(relatedInternalConcept exhaustiveDecomposition partition)
(documentation exhaustiveDecomposition "An &%exhaustiveDecomposition of a
&%Class C is a set of subclasses of C such that every subclass of C either
is an element of the set or is a subclass of an element of the set.  Note:
this does not necessarily mean that the elements of the set are disjoint
(see &%partition - a &%partition is a disjoint exhaustive decomposition.)")

(=>
   (exhaustiveDecomposition @ROW)
   (=>
      (inList ?ELEMENT (ListFn @ROW))
      (instance ?ELEMENT Class)))

(instance disjointDecomposition Predicate)
(instance disjointDecomposition VariableArityRelation)
(domain disjointDecomposition 1 Class)
(relatedInternalConcept disjointDecomposition exhaustiveDecomposition)
(relatedInternalConcept disjointDecomposition disjoint)
(documentation disjointDecomposition "A &%disjointDecomposition of a &%Class
C is a set of subclasses of C that are mutually &%disjoint.")

(=>
   (disjointDecomposition @ROW)
   (=>
      (inList ?ELEMENT (ListFn @ROW))
      (instance ?ELEMENT Class)))

(instance partition Predicate)
(instance partition VariableArityRelation)
(domain partition 1 Class)
(documentation partition "A &%partition of a class C is a set of
mutually &%disjoint classes (a subclass partition) which covers C.
Every instance of C is an instance of exactly one of the subclasses
in the partition.")

(<=>
   (partition @ROW)
   (and
      (exhaustiveDecomposition @ROW)
      (disjointDecomposition @ROW)))

(instance relatedInternalConcept BinaryPredicate)
(instance relatedInternalConcept EquivalenceRelation)
(domain relatedInternalConcept 1 Entity)
(domain relatedInternalConcept 2 Entity)
(documentation relatedInternalConcept "Means that the two arguments are
related concepts within the SUMO, i.e. there is a significant similarity
of meaning between them.  To indicate a meaning relation between a SUMO
concept and a concept from another source, use the Predicate
&%relatedExternalConcept.")

(instance relatedExternalConcept TernaryPredicate)
(domain relatedExternalConcept 1 SymbolicString)
(domain relatedExternalConcept 2 Entity)
(domain relatedExternalConcept 3 Language)
(relatedInternalConcept relatedExternalConcept relatedInternalConcept)
(documentation relatedExternalConcept "Used to signify a three-place
relation between a concept in an external knowledge source, a concept
in the SUMO, and the name of the other knowledge source.")

(subrelation synonymousExternalConcept relatedExternalConcept)
(disjointRelation synonymousExternalConcept subsumedExternalConcept subsumingExternalConcept)
(documentation synonymousExternalConcept "(&%synonymousExternalConcept
?STRING ?THING ?LANGUAGE) means that the SUMO concept ?THING has the
same meaning as ?STRING in ?LANGUAGE.")

(subrelation subsumingExternalConcept relatedExternalConcept)
(documentation subsumingExternalConcept "(&%subsumingExternalConcept
?STRING ?THING ?LANGUAGE) means that the SUMO concept ?THING subsumes
the meaning of ?STRING in ?LANGUAGE, i.e. the concept ?THING is broader
in meaning than ?STRING.")

(subrelation subsumedExternalConcept relatedExternalConcept)
(documentation subsumedExternalConcept "(&%subsumedExternalConcept
?STRING ?THING ?LANGUAGE) means that the SUMO concept ?THING is subsumed
by the meaning of ?STRING in ?LANGUAGE, i.e. the concept ?THING is narrower
in meaning than ?STRING.")

(instance subAttribute BinaryPredicate)
(instance subAttribute PartialOrderingRelation)
(domain subAttribute 1 Attribute)
(domain subAttribute 2 Attribute)
(disjointRelation subAttribute successorAttribute)
(documentation subAttribute "Means that the second argument can be
ascribed to everything which has the first argument ascribed to it.")

(=>
   (subAttribute ?ATTR1 ?ATTR2)
   (forall (?OBJ)
      (=>
         (property ?OBJ ?ATTR1)
         (property ?OBJ ?ATTR2))))

(=>
   (and
      (subAttribute ?ATTR1 ?ATTR2)
      (instance ?ATTR2 ?CLASS))
   (instance ?ATTR1 ?CLASS))

(instance successorAttribute BinaryPredicate)
(instance successorAttribute AsymmetricRelation)
(domain successorAttribute 1 Attribute)
(domain successorAttribute 2 Attribute)
(documentation successorAttribute "(&%successorAttribute ?ATTR1 ?ATTR2)
means that ?ATTR2 is the &%Attribute that comes immediately after ?ATTR1
on the scale that they share.")

(=>
   (and
      (successorAttribute ?ATTR1 ?ATTR2)
      (holdsDuring ?TIME1 (property ?ENTITY ?ATTR2)))
   (exists (?TIME2)
      (and
         (temporalPart ?TIME2 (PastFn ?TIME1))
         (holdsDuring ?TIME2 (property ?ENTITY ?ATTR1)))))

(instance successorAttributeClosure BinaryPredicate)
(instance successorAttributeClosure TransitiveRelation)
(instance successorAttributeClosure IrreflexiveRelation)
(domain successorAttributeClosure 1 Attribute)
(domain successorAttributeClosure 2 Attribute)
(relatedInternalConcept successorAttributeClosure successorAttribute)
(documentation successorAttributeClosure "The transitive closure of
&%successorAttribute.  (&%successorAttributeClosure ?ATTR1 ?ATTR2) means
that there is a chain of &%successorAttribute assertions connecting
?ATTR1 and ?ATTR2.")

(=>
   (successorAttribute ?ATTR1 ?ATTR2)
   (successorAttributeClosure ?ATTR1 ?ATTR2))

(instance and VariableArityRelation)
(instance and LogicalOperator)
(domain and 1 Formula)
(domain and 2 Formula)
(documentation and "The truth-functional connective of conjunction.")

(instance or VariableArityRelation)
(instance or LogicalOperator)
(domain or 1 Formula)
(domain or 2 Formula)
(documentation or "The truth-functional connective of disjunction.")

(instance => BinaryPredicate)
(instance => LogicalOperator)
(domain => 1 Formula)
(domain => 2 Formula)
(documentation => "The truth-functional connective of implication.")

(instance <=> BinaryPredicate)
(instance <=> LogicalOperator)
(domain <=> 1 Formula)
(domain <=> 2 Formula)
(documentation <=> "The truth-functional connective of bi-implication.")

(instance not LogicalOperator)
(domain not 1 Formula)
(documentation not "The truth-functional connective of negation.")

(instance not UnaryRelation)
(instance not LogicalOperator)
(domain not 1 Formula)
(domain not 2 Formula)
(documentation not "The truth-functional connective of negation.    This relation definition was modified by P. Cassidy November 2003 to specify that 'not' is an instance of UnaryRelation")

(instance forall BinaryPredicate)
(instance forall LogicalOperator)
(domain forall 1 List)
(domain forall 2 Formula)
(documentation forall "The universal quantifier of predicate logic.")

(instance exists BinaryPredicate)
(instance exists LogicalOperator)
(domain exists 1 List)
(domain exists 2 Formula)
(documentation exists "The existential quantifier of predicate logic.")

(instance entails BinaryPredicate)
(instance entails LogicalOperator)
(domain entails 1 Formula)
(domain entails 2 Formula)
(documentation entails "The operator of logical entailment.  (&%entails
?FORMULA1 ?FORMULA2) means that ?FORMULA2 can be derived from ?FORMULA1
by means of the proof theory of SUO-KIF.")

;; The following axiom is commented out, because it is rejected by the
;; inference engine's parser.

;;(=>
;;   (entails ?FORMULA1 ?FORMULA2)
;;   (=> ?FORMULA1 ?FORMULA2))

(instance AssignmentFn Function)
(instance AssignmentFn VariableArityRelation)
(domain AssignmentFn 1 Function)
(range AssignmentFn Entity)
(documentation AssignmentFn "If F is a function with a value for the
objects denoted by N1,..., NK, then the term (AssignmentFn F N1 ... NK)
denotes the value of applying F to the objects denoted by N1,..., NK.
Otherwise, the value is undefined.")

(instance holds Predicate)
(instance holds VariableArityRelation)
(domain holds 1 Relation)
(documentation holds "(holds P N1 ... NK) is true just in case
the tuple of objects denoted by N1,..., NK is an element of
the &%Relation P.")

(=>
   (instance ?REL Function)
   (<=>
      (equal (AssignmentFn ?REL @ROW) ?INST)
      (holds ?REL @ROW ?INST)))

(instance PowerSetFn UnaryFunction)
(instance PowerSetFn TotalValuedRelation)
(domain PowerSetFn 1 SetOrClass)
(rangeSubclass PowerSetFn SetOrClass)
(documentation PowerSetFn "(&%PowerSetFn ?CLASS) maps the &%SetOrClass
?CLASS to the &%SetOrClass of all &%subclasses of ?CLASS.")

;; The following two relations, minimumCardinality and maximumCardinality,
;;  were suggested by Ian Niles 17-Jan-2004 to enable the 
;;  SKIF representation of minimum and maximum cardinalities
;;  as used in Protege and other frame-based representations.
;; Note that being an instance of TotalValuedRelation means that
;; the minimum cardinality is always 1, and being an instance
;; of SingleValuedRelation means that the maximum cardinality is
;; always 1. Those restrictions have not yet been related to 
;; the relations below.

(instance minimumCardinality BinaryPredicate)
(domain minimumCardinality 1 BinaryRelation)
(domain minimumCardinality 2 NonnegativeInteger)
(documentation minimumCardinality "(minimumCardinality ?REL ?NUMBER) means that, for any given assignment of a first argument to ?REL, there will be at least ?NUMBER assignments to the second argument of ?REL.")

(=>
   (and
      (minimumCardinality ?REL ?NUMBER1)
      (equal (CardinalityFn (KappaFn ?ARG2 (?REL ?ARG1 ?ARG2))) ?NUMBER2))
   (greaterThanOrEqualTo ?NUMBER2 ?NUMBER1))  

(instance maximumCardinality BinaryPredicate)
(domain maximumCardinality 1 BinaryRelation)
(domain maximumCardinality 2 NonnegativeInteger)
(documentation maximumCardinality "(maximumCardinality ?REL ?NUMBER) means that, for any given 
assignment of a first argument to ?REL, there will be at most ?NUMBER assignments to the second 
argument of ?REL.")

(=>
   (and
      (maximumCardinality ?REL ?NUMBER1)
      (equal (CardinalityFn (KappaFn ?ARG2 (?REL ?ARG1 ?ARG2))) ?NUMBER2))
   (lessThanOrEqualTo ?NUMBER2 ?NUMBER1))  


;; END FILE

;; <module>BASE_ONTOLOGY</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;;;;;
;;   BASE ONTOLOGY   ;;
;;;;;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'STRUCTURAL ONTOLOGY'

;; The following hierarchy incorporates content from Sowa, Russell & Norvig,
;; and the top-level ontology from ITBM-CNR.

(partition Entity Physical Abstract)
(documentation Entity "The universal class of individuals.  This is the root node of the ontology.")

(instance ?THING Entity)

(exists (?THING) (instance ?THING Entity))

(<=>
   (instance ?CLASS Class)
   (subclass ?CLASS Entity))

(subclass Physical Entity)
(partition Physical Object Process)
(documentation Physical "An entity that has a location in space-time.
Note that locations are themselves understood to have a location in
space-time.")

(<=>
   (instance ?PHYS Physical)
   (exists (?LOC ?TIME)
       (and
          (located ?PHYS ?LOC)
          (time ?PHYS ?TIME))))

(subclass Object Physical)
(documentation Object "Corresponds roughly to the class of ordinary
objects.  Examples include normal physical objects, geographical regions,
and locations of &%Processes, the complement of &%Objects in the &%Physical
class.  In a 4D ontology, an &%Object is something whose spatiotemporal
extent is thought of as dividing into spatial parts roughly parallel to the
time-axis.")

(subclass SelfConnectedObject Object)
(documentation SelfConnectedObject "A &%SelfConnectedObject is any
&%Object that does not consist of two or more disconnected parts.")

(instance FrontFn SpatialRelation)
(instance FrontFn PartialValuedRelation)
(instance FrontFn UnaryFunction)
(instance FrontFn AsymmetricRelation)
(instance FrontFn IrreflexiveRelation)
(domain FrontFn 1 SelfConnectedObject)
(range FrontFn SelfConnectedObject)
(documentation FrontFn "A &%Function that maps an &%Object to the side
that generally receives the most attention or that typically faces the
direction in which the &%Object moves.  Note that this is a partial
function, since some &%Objects do not have sides, e.g. apples and
spheres.  Note too that the &%range of this &%Function is indefinite in
much the way that &%ImmediateFutureFn and &%ImmediatePastFn are indefinite.
Although this indefiniteness is undesirable from a theoretical standpoint,
it does not have significant practical implications, since there is
widespread intersubjective agreement about the most common cases.")

(=>
   (instance ?OBJ SelfConnectedObject)
   (side (FrontFn ?OBJ) ?OBJ))

(instance BackFn SpatialRelation)
(instance BackFn PartialValuedRelation)
(instance BackFn UnaryFunction)
(instance BackFn AsymmetricRelation)
(instance BackFn IrreflexiveRelation)
(domain BackFn 1 SelfConnectedObject)
(range BackFn SelfConnectedObject)
(documentation BackFn "A &%Function that maps an &%Object to the side
that is opposite the &%FrontFn of the &%Object.  Note that this is a
partial function, since some &%Objects do not have sides, e.g. apples
and spheres.  Note too that the &%range of this &%Function is indefinite in
much the way that &%ImmediateFutureFn and &%ImmediatePastFn are indefinite.
Although this indefiniteness is undesirable from a theoretical standpoint,
it does not have significant practical implications, since there is
widespread intersubjective agreement about the most common cases.")

(=>
   (instance ?OBJ SelfConnectedObject)
   (side (BackFn ?OBJ) ?OBJ))

(instance part SpatialRelation)
(instance part PartialOrderingRelation)
(domain part 1 Object)
(domain part 2 Object)
(documentation part "The basic mereological relation.  All other
mereological relations are defined in terms of this one.
(&%part ?PART ?WHOLE) simply means that the &%Object ?PART is part
of the &%Object ?WHOLE.  Note that, since &%part is a
&%ReflexiveRelation, every &%Object is a part of itself.")

(instance properPart AsymmetricRelation)
(instance properPart TransitiveRelation)
(subrelation properPart part)
(documentation properPart "(&%properPart ?OBJ1 ?OBJ2) means that
?OBJ1 is a part of ?OBJ2 other than ?OBJ2 itself. This is a
&%TransitiveRelation and &%AsymmetricRelation (hence an
&%IrreflexiveRelation).")

(<=>
   (properPart ?OBJ1 ?OBJ2)
      (and
        (part ?OBJ1 ?OBJ2)
        (not
           (part ?OBJ2 ?OBJ1))))

(subrelation piece part)
(domain piece 1 Substance)
(domain piece 2 Substance)
(documentation piece "A specialized common sense notion of part for
arbitrary parts of &%Substances.  Quasi-synonyms are: chunk, hunk, bit,
etc.  Compare &%component, the other subrelation of &%part.")

(=>
   (piece ?SUBSTANCE1 ?SUBSTANCE2)
   (forall (?CLASS)
      (=>
         (instance ?SUBSTANCE1 ?CLASS)
         (instance ?SUBSTANCE2 ?CLASS))))

(subrelation component part)
(domain component 1 CorpuscularObject)
(domain component 2 CorpuscularObject)
(documentation component "A specialized common sense notion of part
for heterogeneous parts of complexes. (&%component ?COMPONENT ?WHOLE)
means that ?COMPONENT is a component of ?WHOLE. Examples of component
include the doors and walls of a house, the states or provinces of a
country, or the limbs and organs of an animal.  Compare &%piece, which
is also a subrelation of &%part.")

(instance material BinaryPredicate)
(domainSubclass material 1 Substance)
(domain material 2 CorpuscularObject)
(documentation material "(&%material ?SUBSTANCE ?OBJECT) means that
?OBJECT is structurally made up in part of ?SUBSTANCE. This relation
encompasses the concepts of 'composed of', 'made of', and 'formed of'.
For example, plastic is a &%material of my computer monitor.  Compare
&%part and its subrelations, viz &%component and &%piece.")

(subrelation contains partlyLocated)
(instance contains SpatialRelation)
(instance contains AsymmetricRelation)
(disjointRelation contains part)
(domain contains 1 SelfConnectedObject)
(domain contains 2 Object)
(documentation contains "The relation of spatial containment for two
separable objects.  When the two objects are not separable (e.g. an
automobile and one of its seats), the relation of &%part should be used.
(&%contains ?OBJ1 ?OBJ2) means that the &%SelfConnectedObject ?OBJ1 has
a space (i.e. a &%Hole) which is at least partially filled by ?OBJ2.")

(<=>
   (contains ?OBJ1 ?OBJ2)
   (exists (?HOLE)
      (and
         (hole ?HOLE ?OBJ1)
         (properlyFills ?OBJ2 ?HOLE))))

(subclass Substance SelfConnectedObject)
(documentation Substance "An &%Object in which every part is similar to
every other in every relevant respect.  More precisely, something is a
&%Substance when it has only arbitrary pieces as parts - any parts have
properties which are similar to those of the whole.  Note that a &%Substance
may nonetheless have physical properties that vary.  For example, the
temperature, chemical constitution, density, etc. may change from one part
to another.  An example would be a body of water.")

(=>
   (and
      (subclass ?OBJECTTYPE Substance)
      (instance ?OBJECT ?OBJECTTYPE)
      (part ?PART ?OBJECT))
   (instance ?PART ?OBJECTTYPE))

(=>
   (and
      (instance ?OBJ Substance)
      (attribute ?OBJ ?ATTR)
      (part ?PART ?OBJ))
   (attribute ?PART ?ATTR))

(subclass PureSubstance Substance)
(partition PureSubstance CompoundSubstance ElementalSubstance)
(documentation PureSubstance "The &%Class of &%Substances with constant
composition.  A &%PureSubstance can be either an element (&%ElementalSubstance)
or a compound of elements (&%CompoundSubstance).  Examples: Table salt
(sodium chloride, NaCl), sugar (sucrose, C_{12}H_{22}O_{11}), water (H_2O),
iron (Fe), copper (Cu), and oxygen (O_2).")

(subclass ElementalSubstance PureSubstance)
(documentation ElementalSubstance "The &%Class of &%PureSubstances that
cannot be separated into two or more &%Substances by ordinary chemical
(or physical) means. This excludes nuclear reactions. &%ElementalSubstances
are composed of only one kind of atom. Examples: Iron (Fe), copper (Cu),
and oxygen (O_2).  &%ElementalSubstances are the simplest
&%PureSubstances.")

(subclass Metal ElementalSubstance)
(documentation Metal "A &%Metal is an &%ElementalSubstance that conducts heat
and electricity, is shiny and reflects many colors of light, and can be hammered
into sheets or drawn into wire.  About 80% of the known chemical elements
(&%ElementalSubstances) are metals.")

(subclass Atom ElementalSubstance)
(documentation Atom "An extremely small unit of matter that retains its
identity in Chemical reactions.  It consists of an &%AtomicNucleus and
&%Electrons surrounding the &%AtomicNucleus.")

(=>
   (instance ?ATOM Atom)
   (exists (?PROTON ?ELECTRON)
      (and
         (component ?PROTON ?ATOM)
         (component ?ELECTRON ?ATOM)
         (instance ?PROTON Proton)
         (instance ?ELECTRON Electron))))

(=>
   (instance ?ATOM Atom)
   (forall (?NUCLEUS1 ?NUCLEUS2)
      (=>
         (and
            (component ?NUCLEUS1 ?ATOM)
            (component ?NUCLEUS2 ?ATOM)
            (instance ?NUCLEUS1 AtomicNucleus)
            (instance ?NUCLEUS2 AtomicNucleus))
            (equal ?NUCLEUS1 ?NUCLEUS2))))

(subclass SubatomicParticle ElementalSubstance)
(documentation SubatomicParticle "The class of &%ElementalSubstances that
are smaller than &%Atoms and compose &%Atoms.")

(=>
   (instance ?PARTICLE SubatomicParticle)
   (exists (?ATOM)
      (and
         (instance ?ATOM Atom)
         (part ?PARTICLE ?ATOM))))

(subclass AtomicNucleus SubatomicParticle)
(documentation AtomicNucleus "The core of the &%Atom.  It is composed of
&%Protons and &%Neutrons.")

(=>
   (instance ?NUCLEUS AtomicNucleus)
   (exists (?NEUTRON ?PROTON)
      (and
         (component ?NEUTRON ?NUCLEUS)
         (component ?PROTON ?NUCLEUS)
         (instance ?NEUTRON Neutron)
         (instance ?PROTON Proton))))

(subclass Electron SubatomicParticle)
(documentation Electron "&%SubatomicParticles that surround the
&%AtomicNucleus.  They have a negative charge.")

(subclass Proton SubatomicParticle)
(documentation Proton "Components of the &%AtomicNucleus.  They have a
positive charge.")

(subclass Neutron SubatomicParticle)
(documentation Neutron "Components of the &%AtomicNucleus.  They have no
charge.")

(subclass CompoundSubstance PureSubstance)
(documentation CompoundSubstance "The &%Class of &%Substances that contain
two or more elements (&%ElementalSubstances), in definite proportion by weight.
The composition of a pure compound will be invariant, regardless of the method
of preparation. Compounds are composed of more than one kind of atom (element).
The term molecule is often used for the smallest unit of a compound that still
retains all of the properties of the compound.  Examples: Table salt (sodium
chloride, NaCl), sugar (sucrose, C_{12}H_{22}O_{11}), and water (H_2O). ")

(subclass Mixture Substance)
(documentation Mixture "A &%Mixture is two or more &%PureSubstances,
combined in varying proportions - each retaining its own specific properties.
The components of a &%Mixture can be separated by physical means, i.e. without
the making and breaking of chemical bonds. Examples: Air, table salt thoroughly
dissolved in water, milk, wood, and concrete. ")

(=>
   (instance ?MIXTURE Mixture)
   (exists (?PURE1 ?PURE2)
      (and
         (instance ?PURE1 PureSubstance)
         (instance ?PURE2 PureSubstance)
         (not (equal ?PURE1 ?PURE2))
         (part ?PURE1 ?MIXTURE)
         (part ?PURE2 ?MIXTURE))))

(=>
   (and
      (instance ?MIXTURE Mixture)
      (part ?SUBSTANCE ?MIXTURE)
      (not (instance ?SUBSTANCE Mixture)))
   (instance ?SUBSTANCE PureSubstance))

(subclass Solution Mixture)
(documentation Solution "A liquid mixture. The most abundant component in
a solution is called the solvent. Other components are called solutes.
A solution, though homogeneous, may nonetheless have variable composition.
Any amount of salt, up to a maximum limit, can be dissolved in a given
amount of water.")

(subclass CorpuscularObject SelfConnectedObject)
(disjoint CorpuscularObject Substance)
(documentation CorpuscularObject "A &%SelfConnectedObject whose parts have
properties that are not shared by the whole.")

(=>
   (instance ?OBJ CorpuscularObject)
   (exists (?SUBSTANCE1 ?SUBSTANCE2)
      (and
         (subclass ?SUBSTANCE1 Substance)
         (subclass ?SUBSTANCE2 Substance)
         (material ?SUBSTANCE1 ?OBJ)
         (material ?SUBSTANCE2 ?OBJ)
         (not (equal ?SUBSTANCE1 ?SUBSTANCE2)))))

(subclass Region Object)
(partition Region GeographicArea SpaceRegion)
(documentation Region "A topographic location.  &%Regions encompass
surfaces of &%Objects, imaginary places, and &%GeographicAreas.  Note
that a &%Region is the only kind of &%Object which can be located at
itself.  Note too that &%Region is not a subclass of &%SelfConnectedObject,
because some &%Regions, e.g. archipelagos, have &%parts which are not
&%connected with one another.")

(=>
   (instance ?REGION Region)
   (exists (?PHYS)
      (located ?PHYS ?REGION)))

(subclass Collection Object)
(disjoint Collection SelfConnectedObject)
(documentation Collection "Collections have &%members like &%Classes, but,
unlike &%Classes, they have a position in space-time and &%members can be
added and subtracted without thereby changing the identity of the
&%Collection.  Some examples are toolkits, football teams, and flocks
of sheep.")

(=>
   (instance ?COLL Collection)
   (exists (?OBJ)
          (member ?OBJ ?COLL)))

(subrelation member part)
(instance member AsymmetricRelation)
(instance member IntransitiveRelation)
(domain member 1 SelfConnectedObject)
(domain member 2 Collection)
(relatedInternalConcept member instance)
(relatedInternalConcept member element)
(documentation member "A specialized common sense notion of part for
uniform parts of &%Collections.  For example, each sheep in a flock of
sheep would have the relationship of member to the flock.")

(instance subCollection BinaryPredicate)
(instance subCollection PartialOrderingRelation)
(domain subCollection 1 Collection)
(domain subCollection 2 Collection)
(documentation subCollection "(&%subCollection ?COLL1 ?COLL2) means that
the &%Collection ?COLL1 is a proper part of the &%Collection ?COLL2.")

(<=>
   (subCollection ?COLL1 ?COLL2)
   (and
      (instance ?COLL1 Collection)
      (instance ?COLL2 Collection)
      (forall (?MEMBER)
         (=>
            (member ?MEMBER ?COLL1)
            (member ?MEMBER ?COLL2)))))

(subclass ContentBearingObject CorpuscularObject)
(relatedInternalConcept ContentBearingObject containsInformation)
(documentation ContentBearingObject "Any &%SelfConnectedObject that expresses
information.")

(subclass SymbolicString ContentBearingObject)
(documentation SymbolicString "The &%Class of alphanumeric sequences.")

(subclass Character SymbolicString)
(documentation Character "An element of an alphabet, a set of numerals, etc.
Note that a &%Character may or may not be part of a &%Language.  &%Character
is a subclass of &%SymbolicString, because every instance of &%Character is
an alphanumeric sequence consisting of a single element.")

(=>
    (instance ?STRING SymbolicString)
    (exists (?PART)
        (and
            (part ?PART ?STRING)
            (instance ?PART Character))))

(instance containsInformation BinaryPredicate)
(instance containsInformation AsymmetricRelation)
(subrelation containsInformation represents)
(domain containsInformation 1 ContentBearingObject)
(domain containsInformation 2 Proposition)
(documentation containsInformation "A subrelation of &%represents.  This
predicate relates a &%ContentBearingObject to the &%Proposition that is
expressed by the &%ContentBearingObject. Examples include the relationships
between a physical novel and its story and between a printed score and its
musical content.")

(subclass Icon ContentBearingObject)
(documentation Icon "This is the subclass of &%ContentBearingObjects
which are not part of a &%Language and which have some sort of similarity
with the &%Objects that they represent.  This &%Class would include symbolic
roadway signs, representational art works, photographs, etc.")

(subclass MotionPicture Text)
(documentation MotionPicture "A &%ContentBearingObject which depicts motion
(and which may have an audio or text component as well).  This &%Class covers
films, videos, etc.")

(subclass LinguisticExpression ContentBearingObject)
(disjoint LinguisticExpression Icon)
(documentation LinguisticExpression "This is the subclass of
&%ContentBearingObjects which are language-related.  Note that this &%Class
encompasses both &%Language and the the elements of &%Languages,
e.g. &%Words.")

(subclass Language LinguisticExpression)
(disjointDecomposition Language AnimalLanguage HumanLanguage ComputerLanguage)
(documentation Language "A system of signs for expressing thought.  The
system can be either natural or artificial, i.e. something that emerges
gradually as a cultural artifact or something that is intentionally created
by a person or group of people.")

(subclass AnimalLanguage Language)
(documentation AnimalLanguage "The &%subclass of &%Languages used by
&%Animals other than &%Humans.")

(=>
   (and
      (instance ?LANG AnimalLanguage)
      (agent ?PROC ?AGENT)
      (instrument ?PROC ?LANG))
   (and
      (instance ?AGENT Animal)
      (not (instance ?AGENT Human))))

(subclass ArtificialLanguage Language)
(documentation ArtificialLanguage "The &%subclass of &%Languages that are
designed by &%Humans.")

(subclass ComputerLanguage ArtificialLanguage)
(documentation ComputerLanguage "The class of &%Languages designed for
and interpreted by a computer.")

(=>
   (and
      (instance ?LANG ComputerLanguage)
      (agent ?PROC ?AGENT)
      (instrument ?PROC ?LANG))
   (instance ?AGENT Machine))

(subclass HumanLanguage Language)
(partition HumanLanguage NaturalLanguage ConstructedLanguage)
(partition HumanLanguage SpokenHumanLanguage ManualHumanLanguage)
(documentation HumanLanguage "The &%subclass of &%Languages used by
&%Humans.")

(=>
   (and
      (instance ?LANG HumanLanguage)
      (agent ?PROC ?AGENT)
      (instrument ?PROC ?LANG))
   (instance ?AGENT Human))

(subclass ConstructedLanguage HumanLanguage)
(subclass ConstructedLanguage ArtificialLanguage)
(documentation ConstructedLanguage "An &%ConstructedLanguage is a
&%HumanLanguage that did not evolve spontaneously within a language
community, but rather had its core grammar and vocabulary invented by
one or more language experts, often with an aim to produce a more
grammatically regular language than any language that has evolved
naturally.  This &%Class includes languages like Esperanto that were
created to facilitate international communication")

(=>
   (instance ?LANG ConstructedLanguage)
   (exists (?PLAN)
      (and
         (instance ?PLAN Planning)
         (result ?PLAN ?LANG))))

(subclass NaturalLanguage HumanLanguage)
(documentation NaturalLanguage "The &%subclass of &%HumanLanguages which
are not designed and which evolve from generation to generation.  This
&%Class includes all of the national languages, e.g. English, Spanish,
Japanese, etc.  Note that this class includes dialects of natural
languages.")

(subclass ManualHumanLanguage HumanLanguage)
(documentation ManualHumanLanguage "A &%ManualHumanLanguage is a
&%HumanLanguage which has as its medium gestures and movement, such
as the shape, position, and movement of the hands.")

(subclass SpokenHumanLanguage HumanLanguage)
(documentation SpokenHumanLanguage "A &%SpokenHumanLanguage is a
&%HumanLanguage which has as its medium the human voice. It can also
berepresented visually through writing, although not all
&%SpokenHumanLanguages have a codified written form.")

(subclass Word LinguisticExpression)
(partition Word Noun Verb Adjective Adverb Particle)
(documentation Word "A term of a &%Language that represents a concept.")

(subclass Formula Sentence)
(documentation Formula "A syntactically well-formed formula in the
SUO-KIF knowledge representation language.")

;; The following ground facts incorporate the 'Agent' hierarchy from the
;; corresponding ontology on the Ontolingua server.  It also includes
;; predicates defined in the ITBM-CNR ontology "Actors".

(subclass Agent Object)
(documentation Agent "Something or someone that can act on its own and
produce changes in the world.")

(<=>
   (instance ?AGENT Agent)
   (exists (?PROC)
       (agent ?PROC ?AGENT)))

(subclass SentientAgent Agent)
(documentation SentientAgent "An &%Agent that has rights but may or may
not have responsibilities and the ability to reason.  If the latter are
present, then the &%Agent is also an instance of &%CognitiveAgent.
Domesticated animals are an example of &%SentientAgents that are not
also &%CognitiveAgents.")

(subclass CognitiveAgent SentientAgent)
(documentation CognitiveAgent "A &%SentientAgent with responsibilities
and the ability to reason, deliberate, make plans, etc.  This is
essentially the legal/ethical notion of a person.  Note that, although
&%Human is a subclass of &%CognitiveAgent, there may be instances of
&%CognitiveAgent which are not also instances of &%Human.  For example,
chimpanzees, gorillas, dolphins, whales, and some extraterrestrials
(if they exist) may be &%CognitiveAgents.")

(instance leader BinaryPredicate)
(instance leader AsymmetricRelation)
(instance leader SingleValuedRelation)
(domain leader 2 Agent)
(domain leader 1 CognitiveAgent)
(documentation leader "(&%leader ?ORGANIZATION ?PERSON)
means that the leader of ?ORGANIZATION is ?PERSON.")

(subclass Process Physical)
(documentation Process "Intuitively, the class of things that happen
and have temporal parts or stages.  Examples include extended events
like a football match or a race, actions like &%Pursuing and &%Reading,
and biological processes. The formal definition is: anything that lasts
for a time but is not an &%Object.  Note that a &%Process may have
participants 'inside' it which are &%Objects, such as the players
in a football match.  In a 4D ontology, a &%Process is something whose
spatiotemporal extent is thought of as dividing into temporal stages
roughly perpendicular to the time-axis.")

(subclass DualObjectProcess Process)
(documentation DualObjectProcess "Any &%Process that requires two,
nonidentical &%patients.")

(=>
   (instance ?PROCESS DualObjectProcess)
   (exists (?OBJ1 ?OBJ2)
      (and
         (patient ?PROCESS ?OBJ1)
         (patient ?PROCESS ?OBJ2)
         (not (equal ?OBJ1 ?OBJ2)))))

(subclass Abstract Entity)
(disjointDecomposition Abstract Quantity Attribute SetOrClass Relation Proposition Graph GraphElement)
(documentation Abstract "Properties or qualities as distinguished from any
particular embodiment of the properties/qualities in a physical medium.
Instances of Abstract can be said to exist in the same sense as mathematical
objects such as sets and relations, but they cannot exist at a particular
place and time without some physical encoding or embodiment.")

;; Something is Abstract just in case it has neither a spatial nor temporal
;; location.

(<=>
   (instance ?ABS Abstract)
   (not
      (exists (?POINT)
         (or
            (located ?ABS ?POINT)
            (time ?ABS ?POINT)))))

(subclass Quantity Abstract)
(partition Quantity FiniteQuantity InfiniteQuantity)
(documentation Quantity "Any specification of how many or how much of
something there is.  Accordingly, there are two subclasses of &%Quantity:
&%Number (how many) and &%PhysicalQuantity (how much).")

(subclass Attribute Abstract)
(partition Attribute InternalAttribute RelationalAttribute)
(documentation Attribute "Qualities which we cannot or choose not to
reify into subclasses of &%Object.")

(instance property BinaryPredicate)
(domain property 1 Entity)
(domain property 2 Attribute)
(documentation property "This &%Predicate holds between an instance of
&%Entity and an instance of &%Attribute.  (property ?ENTITY ?ATTR)
means that ?ENTITY has the &%Attribute ?ATTR.")

(instance attribute AsymmetricRelation)
(instance attribute IrreflexiveRelation)
(subrelation attribute property)
(domain attribute 1 Object)
(documentation attribute "(&%attribute ?OBJECT ?PROPERTY) means that
?PROPERTY is a &%Attribute of ?OBJECT.  For example,
(&%attribute &%MyLittleRedWagon &%Red).")

(instance manner AsymmetricRelation)
(instance manner IrreflexiveRelation)
(subrelation manner property)
(domain manner 1 Process)
(disjointRelation manner attribute)
(documentation manner "(&%manner ?PROCESS ?MANNER) means that the
&%Process ?PROCESS is qualified by the &%Attribute ?MANNER.  The &%Attributes
of &%Processes are usually denoted by adverbs and include things like the
speed of the wind, the style of a dance, or the intensity of a sports
competition.")

(instance AbstractionFn UnaryFunction)
(instance AbstractionFn PartialValuedRelation)
(domain AbstractionFn 1 Class)
(range AbstractionFn Attribute)
(documentation AbstractionFn "A &%UnaryFunction that maps a &%Class into
the instance of &%Attribute that specifies the condition(s) for membership
in the &%Class.")

(<=>
   (equal (AbstractionFn ?CLASS) ?ATTR)
   (forall (?INST)
      (<=>
         (instance ?INST ?CLASS)
         (property ?INST ?ATTR))))

(instance ExtensionFn UnaryFunction)
(instance ExtensionFn PartialValuedRelation)
(domain ExtensionFn 1 Attribute)
(range ExtensionFn Class)
(documentation ExtensionFn "A &%UnaryFunction that maps an &%Attribute
into the &%Class whose condition for membership is the &%Attribute.")

(<=>
   (equal (ExtensionFn ?ATTRIBUTE) ?CLASS)
   (equal (AbstractionFn ?CLASS) ?ATTRIBUTE))

(subclass InternalAttribute Attribute)
(documentation InternalAttribute "Any &%Attribute of an &%Entity that is an
internal property of the &%Entity, e.g. its shape, its color, its fragility,
etc.")

(subclass RelationalAttribute Attribute)
(documentation RelationalAttribute "Any &%Attribute that an &%Entity has by
virtue of a relationship that it bears to another &%Entity or set of &%Entities,
e.g. &%SocialRoles and &%PositionalAttributes.")

;; The following formulas incorporate the Number hierarchy from the
;; ontology 'kif-numbers' on the Ontolingua server.

(subclass Number Quantity)
(partition Number RealNumber ImaginaryNumber ComplexNumber)
(documentation Number "A measure of how many things there are, or how
much there is, of a certain kind.  &%Numbers are subclassed into
&%RealNumber, &%ComplexNumber, and &%ImaginaryNumber.")

(instance lessThan BinaryPredicate)
(instance lessThan TransitiveRelation)
(instance lessThan IrreflexiveRelation)
(instance lessThan RelationExtendedToQuantities)
(trichotomizingOn lessThan RealNumber)
(domain lessThan 1 Quantity)
(domain lessThan 2 Quantity)
(documentation lessThan "(&%lessThan ?NUMBER1 ?NUMBER2) is true just
in case the &%Quantity ?NUMBER1 is less than the &%Quantity ?NUMBER2.")

(instance greaterThan BinaryPredicate)
(instance greaterThan TransitiveRelation)
(instance greaterThan IrreflexiveRelation)
(instance greaterThan RelationExtendedToQuantities)
(trichotomizingOn greaterThan RealNumber)
(domain greaterThan 1 Quantity)
(domain greaterThan 2 Quantity)
(inverse greaterThan lessThan)
(documentation greaterThan "(&%greaterThan ?NUMBER1 ?NUMBER2) is true
just in case the &%Quantity ?NUMBER1 is greater than the &%Quantity
?NUMBER2.")

(instance lessThanOrEqualTo BinaryPredicate)
(instance lessThanOrEqualTo PartialOrderingRelation)
(instance lessThanOrEqualTo RelationExtendedToQuantities)
(trichotomizingOn lessThanOrEqualTo RealNumber)
(domain lessThanOrEqualTo 1 Quantity)
(domain lessThanOrEqualTo 2 Quantity)
(documentation lessThanOrEqualTo "(&%lessThanOrEqualTo ?NUMBER1 ?NUMBER2)
is true just in case the &%Quantity ?NUMBER1 is less than or equal to
the &%Quantity ?NUMBER2.")

(<=>
   (lessThanOrEqualTo ?NUMBER1 ?NUMBER2)
   (or
     (equal ?NUMBER1 ?NUMBER2)
     (lessThan ?NUMBER1 ?NUMBER2)))

(instance greaterThanOrEqualTo BinaryPredicate)
(instance greaterThanOrEqualTo PartialOrderingRelation)
(instance greaterThanOrEqualTo RelationExtendedToQuantities)
(trichotomizingOn greaterThanOrEqualTo RealNumber)
(domain greaterThanOrEqualTo 1 Quantity)
(domain greaterThanOrEqualTo 2 Quantity)
(inverse greaterThanOrEqualTo lessThanOrEqualTo)
(documentation greaterThanOrEqualTo "(&%greaterThanOrEqualTo ?NUMBER1
?NUMBER2) is true just in case the &%Quantity ?NUMBER1 is greater
than the &%Quantity ?NUMBER2.")

(<=>
   (greaterThanOrEqualTo ?NUMBER1 ?NUMBER2)
   (or
     (equal ?NUMBER1 ?NUMBER2)
     (greaterThan ?NUMBER1 ?NUMBER2)))

(subclass RealNumber Number)
(partition RealNumber NegativeRealNumber NonnegativeRealNumber)
(partition RealNumber RationalNumber IrrationalNumber)
(documentation RealNumber "Any &%Number that can be expressed as a
(possibly infinite) decimal, i.e. any &%Number that has a position
on the number line.")

(subclass ImaginaryNumber Number)
(documentation ImaginaryNumber "Any &%Number that is the result of
multiplying a &%RealNumber by the square root of -1.")

(=>
   (instance ?NUMBER ImaginaryNumber)
   (exists (?REAL)
      (and
         (instance ?REAL RealNumber)
         (equal ?NUMBER (MultiplicationFn ?REAL (SquareRootFn -1))))))

(subclass RationalNumber RealNumber)
(documentation RationalNumber "Any &%RealNumber that is the product of
dividing two &%Integers.")

(subclass IrrationalNumber RealNumber)
(documentation IrrationalNumber "Any &%RealNumber that is not also a
&%RationalNumber.")

(subclass NonnegativeRealNumber RealNumber)
(documentation NonnegativeRealNumber "A &%RealNumber that is greater than
or equal to zero.")

(<=>
   (instance ?NUMBER NonnegativeRealNumber)
   (and
      (greaterThanOrEqualTo ?NUMBER 0)
      (instance ?NUMBER RealNumber)))

(subclass PositiveRealNumber NonnegativeRealNumber)
(documentation PositiveRealNumber "A &%RealNumber that is greater than
zero.")

(<=>
   (instance ?NUMBER PositiveRealNumber)
   (and
      (greaterThan ?NUMBER 0)
      (instance ?NUMBER RealNumber)))

(subclass NegativeRealNumber RealNumber)
(documentation NegativeRealNumber "A &%RealNumber that is less than
zero.")

(<=>
   (instance ?NUMBER NegativeRealNumber)
   (and
      (lessThan ?NUMBER 0)
      (instance ?NUMBER RealNumber)))

(subclass Integer RationalNumber)
(partition Integer OddInteger EvenInteger)
(partition Integer NegativeInteger NonnegativeInteger)
(documentation Integer "A negative or nonnegative whole number.")

(subclass EvenInteger Integer)
(documentation EvenInteger "An &%Integer that is evenly divisible
by 2.")

(subclass OddInteger Integer)
(documentation OddInteger "An &%Integer that is not evenly divisible
by 2.")

(subclass PrimeNumber Integer)
(documentation PrimeNumber "An &%Integer that is evenly divisible only
by itself and 1.")

(subclass NonnegativeInteger Integer)
(subclass NonnegativeInteger NonnegativeRealNumber)
(documentation NonnegativeInteger "An &%Integer that is greater than
or equal to zero.")

(subclass NegativeInteger Integer)
(subclass NegativeInteger NegativeRealNumber)
(documentation NegativeInteger "An &%Integer that is less than zero.")

(subclass PositiveInteger NonnegativeInteger)
(subclass PositiveInteger PositiveRealNumber)
(documentation PositiveInteger "An &%Integer that is greater than zero.")

(subclass BinaryNumber RealNumber)
(documentation BinaryNumber "Elements from the number system with base 2.
Every &%BinaryNumber is expressed as a sequence of the digits 1 and 0.")

(subclass ComplexNumber Number)
(disjoint ComplexNumber RealNumber)
(documentation ComplexNumber "A &%Number that has the form: x + yi, where x
and y are &%RealNumbers and i is the square root of -1.")

(=>
   (instance ?NUMBER ComplexNumber)
   (exists (?REAL1 ?REAL2)
      (and
         (instance ?REAL1 RealNumber)
         (instance ?REAL2 RealNumber)
         (equal ?NUMBER (AdditionFn ?REAL1 (MultiplicationFn ?REAL2 (SquareRootFn -1)))))))

(subclass PhysicalQuantity Quantity)
(partition PhysicalQuantity ConstantQuantity FunctionQuantity)
(documentation PhysicalQuantity "&%A PhysicalQuantity is a measure of
some quantifiable aspect of the modeled world, such as 'the earth's
diameter' (a constant length) and 'the stress in a loaded deformable
solid' (a measure of stress, which is a function of three spatial
coordinates).  All &%PhysicalQuantities are either &%ConstantQuantities
or &%FunctionQuantities.  Instances of &%ConstantQuantity are dependent
on a &%UnitOfMeasure, while instances of &%FunctionQuantity are
&%Functions that map instances of &%ConstantQuantity to other instances
of &%ConstantQuantity (e.g., &%TimeDependentQuantities are
&%FunctionQuantities).  Although the name and definition of
&%PhysicalQuantity is borrowed from physics, &%PhysicalQuantities need
not be material.  Aside from the dimensions of length, time, velocity,
etc., nonphysical dimensions such as currency are also possible.
Accordingly, amounts of money would be instances of &%PhysicalQuantity.
&%PhysicalQuantities are distinguished from &%Numbers by the fact that
the former are associated with a dimension of measurement.")

(subclass ConstantQuantity PhysicalQuantity)
(documentation ConstantQuantity "A &%ConstantQuantity is a
&%PhysicalQuantity which has a constant value, e.g. 3 meters and 5 hours.
The magnitude (see &%MagnitudeFn) of every &%ConstantQuantity is a
&%RealNumber.  &%ConstantQuantities are distinguished from
&%FunctionQuantities, which map &%ConstantQuantities to other
&%ConstantQuantities.  All &%ConstantQuantites are expressed with the
&%BinaryFunction &%MeasureFn, which takes a &%Number and a &%UnitOfMeasure
as arguments.  For example, 3 &%Meters can be expressed as (&%MeasureFn 3
&%Meter).  &%ConstantQuantities form a partial order (see
&%PartialOrderingRelation) with the &%lessThan relation, since &%lessThan
is a &%RelationExtendedToQuantities and &%lessThan is defined over the
&%RealNumbers.  The &%lessThan relation is not a total order (see
&%TotalOrderingRelation) over the class &%ConstantQuantity since elements
of some subclasses of &%ConstantQuantity (such as length quantities)
are incomparable to elements of other subclasses of &%ConstantQuantity
(such as mass quantities).")

(subclass TimeMeasure ConstantQuantity)
(documentation TimeMeasure "The class of temporal durations (instances
of &%TimeDuration) and positions of &%TimePoints and &%TimeIntervals along
the universal timeline (instances of &%TimePosition).")

(subclass TimeDuration TimeMeasure)
(documentation TimeDuration "Any measure of length of time,
with or without respect to the universal timeline.")

(subclass TimePosition TimeMeasure)
(partition TimePosition TimeInterval TimePoint)
(documentation TimePosition "Any &%TimePoint or &%TimeInterval
along the universal timeline from &%NegativeInfinity to
&%PositiveInfinity.")

(subclass TimeInterval TimePosition)
(documentation TimeInterval "An interval of time.  Note that a
&%TimeInterval has both an extent and a location on the universal
timeline.  Note too that a &%TimeInterval has no gaps, i.e. this
class contains only convex time intervals.")

(subclass TimePoint TimePosition)
(documentation TimePoint "An extensionless point on the universal timeline.
The &%TimePoints at which &%Processes occur can be known with various
degrees of precision and approximation, but conceptually &%TimePoints are
point-like and not interval-like.  That is, it doesn't make sense to talk
about how long a &%TimePoint lasts.")

(subclass FunctionQuantity PhysicalQuantity)
(subclass FunctionQuantity Function)
(documentation FunctionQuantity "A &%FunctionQuantity is a &%Function that
maps from one or more instances of &%ConstantQuantity to another instance
of &%ConstantQuantity.  For example, the velocity of a particle would be
represented by a &%FunctionQuantity mapping values of time (which are
&%ConstantQuantities) to values of distance (also &%ConstantQuantities).
Note that all instances of &%FunctionQuantity are &%Functions with a fixed
arity.  Note too that all elements of the range of a &%FunctionQuantity
have the same physical dimension as the &%FunctionQuantity itself.")

(subclass UnaryConstantFunctionQuantity FunctionQuantity)
(subclass UnaryConstantFunctionQuantity UnaryFunction)
(documentation UnaryConstantFunctionQuantity "The class of &%UnaryFunctions
that map from the &%Class &%ConstantQuantity to the &%Class
&%ConstantQuantity.")

(=>
   (instance ?FUNCTION UnaryConstantFunctionQuantity)
   (and
      (domain ?FUNCTION 1 ConstantQuantity)
      (range ?FUNCTION ConstantQuantity)))

(subclass TimeDependentQuantity UnaryConstantFunctionQuantity)
(subclass TimeDependentQuantity ContinuousFunction)
(documentation TimeDependentQuantity "A &%UnaryConstantFunction of continuous
time.  All instances of this &%Class map a time quantity into another
&%ConstantQuantity such as temperature.  For example, 'the temperature at
the top of the Empire State Building' is a &%TimeDependentQuantity since
its value depends on the time.")

(=>
   (instance ?FUNCTION TimeDependentQuantity)
   (domain ?FUNCTION 1 TimeMeasure))

(subclass SetOrClass Abstract)
(partition SetOrClass Set Class)
(documentation SetOrClass "The &%SetOrClass of &%Sets and &%Classes, i.e. any instance
of &%Abstract that has &%elements or &%instances.")

(subclass Class SetOrClass)
(documentation Class "&%Classes differ from &%Sets in three important respects.
First, &%Classes are not assumed to be extensional.  That is, distinct
&%Classes might well have exactly the same instances.  Second, &%Classes typically
have an associated `condition' that determines the instances of the &%Class.  So,
for example, the condition `human' determines the &%Class of &%Humans.  Note that
some &%Classes might satisfy their own condition (e.g., the &%Class of &%Abstract
things is &%Abstract) and hence be instances of themselves.  Third, the instances
of a class may occur only once within the class, i.e. a class cannot contain
duplicate instances.")

(subclass Set SetOrClass)
(documentation Set "A &%SetOrClass that satisfies extensionality as well as
other constraints specified by some choice of set theory.  &%Sets differ
from &%Classes in two important respects.  First, &%Sets are extensional -
two &%Sets with the same &%elements are identical.  Second, a &%Set can be
an arbitrary stock of objects.  That is, there is no requirement that &%Sets
have an associated condition that determines their membership.  Note that &%Sets
are not assumed to be unique sets, i.e. &%elements of a &%Set may occur more
than once in the &%Set.")

(subclass Relation Abstract)
(disjointDecomposition Relation UnaryRelation BinaryRelation TernaryRelation QuaternaryRelation QuintaryRelation VariableArityRelation)
(partition Relation Predicate Function List)
(partition Relation TotalValuedRelation PartialValuedRelation)
(documentation Relation "The &%Class of relations.  There are three kinds
of &%Relation:  &%Predicate, &%Function, and &%List.  &%Predicates and
&%Functions both denote sets of ordered n-tuples.  The difference between
these two &%Classes is that &%Predicates cover formula-forming operators, while &%Functions cover term-forming operators.  A &%List, on the other hand, is a particular ordered n-tuple.  This statement was modified by P. Cassidy January 2004 to include UnaryRelation.")

(=>
   (instance ?REL Relation)
   (<=>
        (holds ?REL @ROW)
        (?REL @ROW)))

;; The following part of the ontology covers the various classes under
;; 'Relation'.  Most of the content here is taken from frame-ontology,
;; abstract-algebra, kif-relations, and kif-extensions (ontologies
;; available on the Ontolingua server).

(subclass SingleValuedRelation Relation)
(instance SingleValuedRelation InheritableRelation)
(documentation SingleValuedRelation "A &%Relation is a &%SingleValuedRelation
just in case an assignment of values to every argument position except the last
one determines at most one assignment for the last argument position.  Note
that not all &%SingleValuedRelations are &%TotalValuedRelations.")

(=>
   (instance ?REL SingleValuedRelation)
   (forall (@ROW ?ITEM1 ?ITEM2)
      (=>
         (and
            (holds ?REL @ROW ?ITEM1)
            (holds ?REL @ROW ?ITEM2))
         (equal ?ITEM1 ?ITEM2))))

(subclass TotalValuedRelation Relation)
(instance TotalValuedRelation InheritableRelation)
(documentation TotalValuedRelation "A &%Relation is a &%TotalValuedRelation
just in case there exists an assignment for the last argument position of the
&%Relation given any assignment of values to every argument position except
the last one.  Note that declaring a &%Relation to be both a &%TotalValuedRelation
and a &%SingleValuedRelation means that it is a total function.")

(<=>
   (instance ?REL TotalValuedRelation)
   (exists (?VALENCE)
      (and
         (instance ?REL Relation)
         (valence ?REL ?VALENCE)
         (=>
            (forall (?NUMBER ?ELEMENT ?CLASS)
               (=>
                  (and
                     (lessThan ?NUMBER ?VALENCE)
                     (domain ?REL ?NUMBER ?CLASS)
                     (equal ?ELEMENT (ListOrderFn (ListFn @ROW) ?NUMBER)))
                  (instance ?ELEMENT ?CLASS)))
            (exists (?ITEM)
               (holds ?REL @ROW ?ITEM))))))

(subclass PartialValuedRelation Relation)
(documentation PartialValuedRelation "A &%Relation is a &%PartialValuedRelation
just in case it is not a &%TotalValuedRelation, i.e. just in case assigning values
to every argument position except the last one does not necessarily mean that there
is a value assignment for the last argument position.  Note that, if a &%Relation
is both a &%PartialValuedRelation and a &%SingleValuedRelation, then it is a partial
function.")

(subclass UnaryRelation Relation)
(documentation UnaryRelation "This relation was added to the SUMO 1.55 in November 2003 by P. Cassidy to allow consistent inclusion of the 'not' logical operator within the hierarchy of relations.")

(subclass BinaryRelation Relation)
(instance BinaryRelation InheritableRelation)
(documentation BinaryRelation "&%BinaryRelations are relations that are
true only of pairs of things.  &%BinaryRelations are represented as slots
in frame systems.")

(=>
   (instance ?REL BinaryRelation)
   (not
      (exists (?ITEM1 ?ITEM2 ?ITEM3 @ROW)
         (holds ?REL ?ITEM1 ?ITEM2 ?ITEM3 @ROW))))

(subclass ReflexiveRelation BinaryRelation)
(documentation ReflexiveRelation "&%Relation ?REL is reflexive if
(?REL ?INST ?INST) for all ?INST.")

(=>
   (instance ?REL ReflexiveRelation)
   (=>
      (or
         (holds ?REL ?INST1 ?INST2)
         (holds ?REL ?INST2 ?INST1))
      (holds ?REL ?INST1 ?INST1)))

(subclass IrreflexiveRelation BinaryRelation)
(documentation IrreflexiveRelation "&%Relation ?REL is irreflexive
if (?REL ?INST ?INST) holds for no value of ?INST.")

(=>
   (instance ?REL IrreflexiveRelation)
   (forall (?INST)
      (not
         (holds ?REL ?INST ?INST))))

(subclass SymmetricRelation BinaryRelation)
(documentation SymmetricRelation "A &%BinaryRelation ?REL is
symmetric just in case (?REL ?INST1 ?INST2) imples (?REL
?INST2 ?INST1), for all ?INST1 and ?INST2.")


(=>
   (instance ?REL SymmetricRelation)
   (forall (?INST1 ?INST2)
      (=>
         (holds ?REL ?INST1 ?INST2)
         (holds ?REL ?INST2 ?INST1))))

(subclass AsymmetricRelation IrreflexiveRelation)
(subclass AsymmetricRelation AntisymmetricRelation)
(documentation AsymmetricRelation "A &%BinaryRelation is asymmetric only
if it is both an &%AntisymmetricRelation and an &%IrreflexiveRelation.")

(=>
   (and
      (instance ?REL BinaryRelation)
      (or
         (domain ?REL 1 ?CLASS1)
         (domainSubclass ?REL 1 ?CLASS1))
      (or
         (domain ?REL 2 ?CLASS2)
         (domainSubclass ?REL 2 ?CLASS2)
         (range ?REL ?CLASS2)
         (rangeSubclass ?REL ?CLASS2))
      (disjoint ?CLASS1 ?CLASS2))
   (instance ?REL AsymmetricRelation))

(subclass AntisymmetricRelation BinaryRelation)
(documentation AntisymmetricRelation "&%BinaryRelation ?REL is an
&%AntisymmetricRelation if for distinct ?INST1 and ?INST2, (?REL ?INST1
?INST2) implies not (?REL ?INST2 ?INST1).  In other words, for all ?INST1
and ?INST2, (?REL ?INST1 ?INST2) and (?REL ?INST2 ?INST1) imply that ?INST1
and ?INST2 are identical.  Note that it is possible for an
&%AntisymmetricRelation to be a &%ReflexiveRelation.")

(=>
   (instance ?REL AntisymmetricRelation)
   (forall (?INST1 ?INST2)
      (=>
         (and
            (holds ?REL ?INST1 ?INST2)
            (holds ?REL ?INST2 ?INST1))
         (equal ?INST1 ?INST2))))

(subclass TrichotomizingRelation BinaryRelation)
(documentation TrichotomizingRelation "A &%BinaryRelation ?REL is a
&%TrichotomizingRelation just in case all ordered pairs consisting of
distinct individuals are elements of ?REL.")

(=>
   (instance ?REL TrichotomizingRelation)
   (forall (?INST1 ?INST2)
      (or
         (holds ?REL ?INST1 ?INST2)
         (equal ?INST1 ?INST2)
         (holds ?REL ?INST2 ?INST1))))

(subclass TransitiveRelation BinaryRelation)
(documentation TransitiveRelation "A &%BinaryRelation ?REL is transitive
if (?REL ?INST1 ?INST2) and (?REL ?INST2 ?INST3) imply (?REL ?INST1 ?INST3),
for all ?INST1, ?INST2, and ?INST3.")

(=>
   (instance ?REL TransitiveRelation)
   (forall (?INST1 ?INST2 ?INST3)
      (=>
         (and
            (holds ?REL ?INST1 ?INST2)
            (holds ?REL ?INST2 ?INST3))
         (holds ?REL ?INST1 ?INST3))))

(subclass IntransitiveRelation BinaryRelation)
(documentation IntransitiveRelation "A &%BinaryRelation ?REL is
intransitive only if (?REL ?INST1 ?INST2) and (?REL ?INST2 ?INST3) imply not
(?REL ?INST1 ?INST3), for all ?INST1, ?INST2, and ?INST3.")

(=>
   (instance ?REL IntransitiveRelation)
   (forall (?INST1 ?INST2 ?INST3)
      (=>
         (and
            (holds ?REL ?INST1 ?INST2)
            (holds ?REL ?INST2 ?INST3))
         (not
            (holds ?REL ?INST1 ?INST3)))))

(subclass PartialOrderingRelation TransitiveRelation)
(subclass PartialOrderingRelation AntisymmetricRelation)
(subclass PartialOrderingRelation ReflexiveRelation)
(documentation PartialOrderingRelation "A &%BinaryRelation is a partial
ordering if it is a &%ReflexiveRelation, an &%AntisymmetricRelation, and
a &%TransitiveRelation.")

(subclass TotalOrderingRelation PartialOrderingRelation)
(subclass TotalOrderingRelation TrichotomizingRelation)
(documentation TotalOrderingRelation  "A &%BinaryRelation is a
&%TotalOrderingRelation if it is a &%PartialOrderingRelation
and a &%TrichotomizingRelation.")

(=>
   (instance ?REL TotalOrderingRelation)
   (forall (?INST1 ?INST2)
      (or
         (holds ?REL ?INST1 ?INST2)
         (holds ?REL ?INST2 ?INST1))))

(subclass EquivalenceRelation TransitiveRelation)
(subclass EquivalenceRelation SymmetricRelation)
(subclass EquivalenceRelation ReflexiveRelation)
(documentation EquivalenceRelation "A &%BinaryRelation is an equivalence
relation if it is a &%ReflexiveRelation, a &%SymmetricRelation, and a
&%TransitiveRelation.")

(subclass CaseRole BinaryPredicate)
(instance CaseRole InheritableRelation)
(subclass CaseRole AsymmetricRelation)
(documentation CaseRole "The &%Class of &%Predicates relating the
spatially distinguished parts of a &%Process. &%CaseRoles include, for
example, the &%agent, &%patient or &%destination of an action, the flammable
substance in a burning process, or the water that falls in rain.")

(instance agent CaseRole)
(domain agent 1 Process)
(domain agent 2 Agent)
(documentation agent "(&%agent ?PROCESS ?AGENT) means that ?AGENT is
an active determinant, either animate or inanimate, of the &%Process
?PROCESS, with or without voluntary intention.  For example, water is
the &%agent of erosion in the following proposition:  the water
eroded the coastline.  For another example, Eve is an &%agent in the
following proposition: Eve bit an apple.")

(=>
   (instance ?PROCESS Process)
   (exists (?CAUSE)
      (agent ?PROCESS ?CAUSE)))

(instance destination CaseRole)
(domain destination 1 Process)
(domain destination 2 Entity)
(documentation destination "(destination ?PROCESS ?GOAL) means that
?GOAL is the target or goal of the Process ?PROCESS.  For example,
Danbury would be the destination in the following proposition:  Bob went
to Danbury.  Note that this is a very general &%CaseRole and, in
particular, that it covers the concepts of 'recipient' and 'beneficiary'.
Thus, John would be the &%destination in the following proposition:
Tom gave a book to John.")

(instance experiencer CaseRole)
(domain experiencer 1 Process)
(domain experiencer 2 Agent)
(documentation experiencer "(&%experiencer ?PROCESS ?AGENT) means
that ?AGENT experiences the &%Process ?PROCESS.  For example, Yojo
is the &%experiencer of seeing in the following proposition:  Yojo
sees the fish.  Note that &%experiencer, unlike &%agent, does
not entail a causal relation between its arguments.")

(subrelation instrument patient)
(domain instrument 1 Process)
(domain instrument 2 Object)
(documentation instrument "(instrument ?EVENT ?TOOL) means that ?TOOL
is used by an agent in bringing about ?EVENT and that ?TOOL is not
changed by ?EVENT.  For example, the key is an &%instrument in the
following proposition: The key opened the door.  Note that &%instrument
and &%resource cannot be satisfied by the same ordered pair.")

(instance origin CaseRole)
(domain origin 1 Process)
(domain origin 2 Object)
(documentation origin "(&%origin ?PROCESS ?SOURCE) means that ?SOURCE
indicates where the ?Process began.  Note that this relation implies
that ?SOURCE is present at the beginning of the process, but need not
participate throughout the process.  For example, the submarine is the
&%origin in the following proposition: the missile was launched from a
submarine.")

(instance patient CaseRole)
(domain patient 1 Process)
(domain patient 2 Entity)
(documentation patient "(&%patient ?PROCESS ?ENTITY) means that ?ENTITY
is a participant in ?PROCESS that may be moved, said, experienced, etc.
For example, the direct objects in the sentences 'The cat swallowed the
canary' and 'Billy likes the beer' would be examples of &%patients.  Note
that the &%patient of a &%Process may or may not undergo structural
change as a result of the &%Process.  The &%CaseRole of &%patient is used
when one wants to specify as broadly as possible the object of a
&%Process.")

(subrelation resource patient)
(domain resource 1 Process)
(domain resource 2 Object)
(disjointRelation resource result instrument)
(documentation resource "(&%resource ?PROCESS ?RESOURCE) means that
?RESOURCE is present at the beginning of ?PROCESS, is used by ?PROCESS,
and as a consequence is changed by ?PROCESS.  For example, soap is a
&%resource in the following proposition:  the gun was carved out of soap.
Note that &%resource differs from &%instrument, another subrelation of
&%patient, in that its internal or physical properties are altered in
some way by the &%Process.")

(subrelation result patient)
(domain result 1 Process)
(domain result 2 Entity)
(documentation result "(result ?ACTION ?OUTPUT) means that ?OUTPUT is
a product of ?ACTION.  For example, house is a &%result in the
following proposition: Eric built a house.")

(instance InheritableRelation Class)
(documentation InheritableRelation "This is a &%Class of &%Classes.  Each
&%instance of &%InheritableRelation is a &%subclass of &%Relation whose
properties can be inherited downward in the class hierarchy via the
&%subrelation &%Predicate.")

(subclass ProbabilityRelation Relation)
(instance ProbabilityRelation InheritableRelation)
(documentation ProbabilityRelation "The &%Class of &%Relations that
permit assessment of the probability of an event or situation.")

(instance ProbabilityFn ProbabilityRelation)
(instance ProbabilityFn TotalValuedRelation)
(instance ProbabilityFn UnaryFunction)
(domain ProbabilityFn 1 Formula)
(range ProbabilityFn RealNumber)
(instance ProbabilityFn AsymmetricRelation)
(documentation ProbabilityFn "One of the basic &%ProbabilityRelations,
&%ProbabilityFn is used to state the a priori probability of a state of
affairs.  (&%ProbabilityFn ?FORMULA) denotes the a priori probability
of ?FORMULA.")

(instance conditionalProbability ProbabilityRelation)
(instance conditionalProbability TernaryPredicate)
(domain conditionalProbability 1 Formula)
(domain conditionalProbability 2 Formula)
(domain conditionalProbability 3 RealNumber)
(documentation conditionalProbability "One of the basic &%ProbabilityRelations.
&%conditionalProbability is used to state the numeric value of a conditional
probability.  (&%conditionalProbability ?FORMULA1 ?FORMULA2 ?NUMBER) means
that the probability of ?FORMULA2 being true given that ?FORMULA1 is true is
?NUMBER.")

(instance increasesLikelihood ProbabilityRelation)
(instance increasesLikelihood BinaryPredicate)
(instance increasesLikelihood IrreflexiveRelation)
(domain increasesLikelihood 1 Formula)
(domain increasesLikelihood 2 Formula)
(disjointRelation increasesLikelihood decreasesLikelihood independentProbability)
(documentation increasesLikelihood "One of the basic &%ProbabilityRelations.
(&%increasesLikelihood ?FORMULA1 ?FORMULA2) means that ?FORMULA2 is more
likely to be true if ?FORMULA1 is true.")

(=>
   (and
      (increasesLikelihood ?FORMULA1 ?FORMULA2)
      (equal (ProbabilityFn ?FORMULA2) ?NUMBER1)
      (conditionalProbability ?FORMULA1 ?FORMULA2 ?NUMBER2))
   (greaterThan ?NUMBER2 ?NUMBER1))

(instance decreasesLikelihood ProbabilityRelation)
(instance decreasesLikelihood BinaryPredicate)
(instance decreasesLikelihood IrreflexiveRelation)
(domain decreasesLikelihood 1 Formula)
(domain decreasesLikelihood 2 Formula)
(documentation decreasesLikelihood "One of the basic &%ProbabilityRelations.
(&%decreasesLikelihood ?FORMULA1 ?FORMULA2) means that ?FORMULA2 is less
likely to be true if ?FORMULA1 is true.")

(=>
   (and
      (decreasesLikelihood ?FORMULA1 ?FORMULA2)
      (equal (ProbabilityFn ?FORMULA2) ?NUMBER1)
      (conditionalProbability ?FORMULA1 ?FORMULA2 ?NUMBER2))
   (lessThan ?NUMBER2 ?NUMBER1))

(instance independentProbability ProbabilityRelation)
(instance independentProbability BinaryPredicate)
(instance independentProbability SymmetricRelation)
(domain independentProbability 1 Formula)
(domain independentProbability 2 Formula)
(documentation independentProbability "One of the basic &%ProbabilityRelations.
(&%independentProbability ?FORMULA1 ?FORMULA2) means that the probabilities of
?FORMULA1 and ?FORMULA2 being true are independent.")

(=>
   (and
      (independentProbability ?FORMULA1 ?FORMULA2)
      (equal (ProbabilityFn ?FORMULA2) ?NUMBER1)
      (conditionalProbability ?FORMULA1 ?FORMULA2 ?NUMBER2))
   (equal ?NUMBER2 ?NUMBER1))

(=>
   (and
      (instance ?FORMULA1 Formula)
      (instance ?FORMULA2 Formula))
   (or
      (increasesLikelihood ?FORMULA1 ?FORMULA2)
      (decreasesLikelihood ?FORMULA1 ?FORMULA2)
      (independentProbability ?FORMULA1 ?FORMULA2)))

(subclass SpatialRelation Relation)
(instance SpatialRelation InheritableRelation)
(documentation SpatialRelation "The &%Class of &%Relations that are
spatial in a wide sense.  This &%Class includes mereological relations
and topological relations.")

(subclass TemporalRelation Relation)
(instance TemporalRelation InheritableRelation)
(documentation TemporalRelation "The &%Class of temporal &%Relations.
This &%Class includes notions of (temporal) topology of intervals,
(temporal) schemata, and (temporal) extension.")

(instance IntentionalRelation InheritableRelation)
(documentation IntentionalRelation "The &%Class of &%Relations between
an &%Agent and one or more &%Entities, where the &%Relation requires that
the &%Agent have awareness of the &%Entity.")

(=>
   (and
      (instance ?REL IntentionalRelation)
      (holds ?REL ?AGENT @ROW)
      (inList ?OBJ (ListFn @ROW)))
   (inScopeOfInterest ?AGENT ?OBJ))

(instance prefers TernaryPredicate)
(instance prefers IntentionalRelation)
(domain prefers 1 CognitiveAgent)
(domain prefers 2 Formula)
(domain prefers 3 Formula)
(documentation prefers "(&%prefers ?AGENT ?FORMULA1 ?FORMULA2) means that
&%CognitiveAgent ?AGENT prefers the state of affairs expressed by ?FORMULA1
over the state of affairs expressed by ?FORMULA2 all things being equal.")

(=>
   (prefers ?AGENT ?FORMULA1 ?FORMULA2)
   (not (and
      (true ?FORMULA1 True)
      (true ?FORMULA2 True))))

(subclass PropositionalAttitude IntentionalRelation)
(subclass PropositionalAttitude AsymmetricRelation)
(instance PropositionalAttitude InheritableRelation)
(documentation PropositionalAttitude "The &%Class of
&%IntentionalRelations where the &%Agent has awareness of a
&%Proposition.")

(=>
   (and
      (instance ?REL PropositionalAttitude)
      (holds ?REL ?AGENT ?FORMULA))
   (instance ?FORMULA Formula))

(subclass ObjectAttitude IntentionalRelation)
(instance ObjectAttitude InheritableRelation)
(disjoint ObjectAttitude PropositionalAttitude)
(documentation ObjectAttitude "The &%Class of &%IntentionalRelations
where the &%Agent has awareness of an instance of &%Physical.")

(=>
   (and
      (instance ?REL ObjectAttitude)
      (holds ?REL ?AGENT ?THING))
   (instance ?THING Physical))

(instance inScopeOfInterest BinaryPredicate)
(instance inScopeOfInterest IntentionalRelation)
(domain inScopeOfInterest 1 CognitiveAgent)
(domain inScopeOfInterest 2 Entity)
(documentation inScopeOfInterest "A very general &%Predicate.
(&%inScopeOfInterest ?AGENT ?ENTITY) means that ?ENTITY is within the
scope of interest of ?AGENT.  Note that the interest indicated can be
either positive or negative, i.e. the ?AGENT can have an interest in
avoiding or promoting ?ENTITY.")

(=>
   (and
      (instance ?PROCESS IntentionalProcess)
      (agent ?PROCESS ?AGENT)
      (patient ?PROCESS ?OBJECT))
   (inScopeOfInterest ?AGENT ?OBJECT))

(instance needs ObjectAttitude)
(subrelation needs inScopeOfInterest)
(domain needs 1 CognitiveAgent)
(domain needs 2 Physical)
(documentation needs "(&%needs ?AGENT ?OBJECT) means that ?OBJECT is
physically required for the continued existence of ?AGENT.")

(=>
    (needs ?AGENT ?OBJECT)
    (wants ?AGENT ?OBJECT))

(instance wants ObjectAttitude)
(subrelation wants inScopeOfInterest)
(relatedInternalConcept wants desires)
(domain wants 1 CognitiveAgent)
(domain wants 2 Physical)
(documentation wants "(&%wants ?AGENT ?OBJECT) means that ?OBJECT is desired by ?AGENT,
i.e. ?AGENT believes that ?OBJECT will satisfy one of its goals.  Note that there is
no implication that what is wanted by an agent is not already possessed by the agent.")

(=>
   (wants ?AGENT ?OBJ)
   (exists (?PURP)
      (hasPurposeForAgent ?OBJ ?PURP ?AGENT)))

(=>
   (wants ?AGENT ?OBJ)
   (desires ?AGENT (possesses ?AGENT ?OBJ)))

(instance desires PropositionalAttitude)
(subrelation desires inScopeOfInterest)
(relatedInternalConcept desires wants)
(domain desires 1 CognitiveAgent)
(domain desires 2 Formula)
(documentation desires "(&%desires ?AGENT ?FORMULA) means that ?AGENT wants
to bring about the state of affairs expressed by ?FORMULA.  Note that there
is no implication that what is desired by the agent is not already true.
Note too that &%desires is distinguished from &%wants only in that the former
is a &%PropositionalAttitude, while &%wants is an &%ObjectAttitude.")

(instance considers PropositionalAttitude)
(subrelation considers inScopeOfInterest)
(domain considers 1 CognitiveAgent)
(domain considers 2 Formula)
(documentation considers "(&%considers ?AGENT ?FORMULA) means that ?AGENT
considers or wonders about the truth of the proposition expressed by
?FORMULA.")

(instance believes PropositionalAttitude)
(subrelation believes inScopeOfInterest)
(domain believes 1 CognitiveAgent)
(domain believes 2 Formula)
(documentation believes "The epistemic predicate of belief.
(&%believes ?AGENT ?FORMULA) means that ?AGENT believes the proposition
expressed by ?FORMULA.")

(=>
   (believes ?AGENT ?FORMULA)
   (exists (?TIME)
      (holdsDuring ?TIME (considers ?AGENT ?FORMULA))))

(instance knows PropositionalAttitude)
(subrelation knows inScopeOfInterest)
(domain knows 1 CognitiveAgent)
(domain knows 2 Formula)
(documentation knows "The epistemic predicate of knowing.  (&%knows
?AGENT ?FORMULA) means that ?AGENT knows the proposition expressed by
?FORMULA.  Note that &%knows entails conscious awareness, so this
&%Predicate cannot be used to express tacit or subconscious or
unconscious knowledge.")

(=>
    (knows ?AGENT ?FORMULA)
    (believes ?AGENT ?FORMULA))

(=>
   (knows ?AGENT ?FORMULA)
   (true ?FORMULA True))

(subclass TernaryRelation Relation)
(instance TernaryRelation InheritableRelation)
(documentation TernaryRelation "&%TernaryRelations relate three items.
The two &%subclasses of &%TernaryRelation are &%TernaryPredicate and
&%BinaryFunction.")

(=>
   (instance ?REL TernaryRelation)
   (not
      (exists (?ITEM1 ?ITEM2 ?ITEM3 ?ITEM4 @ROW)
         (holds ?REL ?ITEM1 ?ITEM2 ?ITEM3 ?ITEM4 @ROW))))

(subclass QuaternaryRelation Relation)
(instance QuaternaryRelation InheritableRelation)
(documentation QuaternaryRelation "&%QuaternaryRelations relate four
items.  The two &%subclasses of &%QuaternaryRelation are
&%QuaternaryPredicate and &%TernaryFunction.")

(=>
   (instance ?REL QuaternaryRelation)
   (not
      (exists (?ITEM1 ?ITEM2 ?ITEM3 ?ITEM4 ?ITEM5 @ROW)
         (holds ?REL ?ITEM1 ?ITEM2 ?ITEM3 ?ITEM4 ?ITEM5 @ROW))))

(subclass QuintaryRelation Relation)
(instance QuintaryRelation InheritableRelation)
(documentation QuintaryRelation "&%QuintaryRelations relate five items.
The two &%subclasses of &%QuintaryRelation are &%QuintaryPredicate and
&%QuaternaryFunction.")

(=>
   (instance ?REL QuintaryRelation)
   (not
      (exists (?ITEM1 ?ITEM2 ?ITEM3 ?ITEM4 ?ITEM5 ?ITEM6 @ROW)
         (holds ?REL ?ITEM1 ?ITEM2 ?ITEM3 ?ITEM4 ?ITEM5 ?ITEM6 @ROW))))

(subclass List Relation)
(documentation List "Every &%List is a particular ordered n-tuple of
items.  Generally speaking, &%Lists are created by means of the &%ListFn
&%Function, which takes any number of items as arguments and returns a
&%List with the items in the same order.  Anything, including other
&%Lists, may be an item in a &%List.  Note too that &%Lists are
extensional - two lists that have the same items in the same order are
identical.  Note too that a &%List may contain no items.  In that case,
the &%List is the &%NullList.")

(=>
   (instance ?LIST List)
   (exists (?NUMBER1)
      (exists (?ITEM1)
         (and
            (not (equal (ListOrderFn ?LIST ?NUMBER1) ?ITEM1))
            (forall (?NUMBER2)
               (=>
                  (and
                     (instance ?NUMBER2 PositiveInteger)
                     (lessThan ?NUMBER2 ?NUMBER1))
                  (exists (?ITEM2)
                     (equal (ListOrderFn ?LIST ?NUMBER2) ?ITEM2))))))))

(subclass UniqueList List)
(documentation UniqueList "A &%List in which no item appears more than once,
i.e. a &%List for which there are no distinct numbers ?NUMBER1 and ?NUMBER2
such that (&%ListOrderFn ?LIST ?NUMBER1) and (&%ListOrderFn ?LIST ?NUMBER2)
return the same value.")

(=>
   (instance ?LIST UniqueList)
   (forall (?NUMBER1 ?NUMBER2)
      (=>
         (equal (ListOrderFn ?LIST ?NUMBER1) (ListOrderFn ?LIST ?NUMBER2))
         (equal ?NUMBER1 ?NUMBER2))))

(instance NullList List)
(documentation NullList "The &%List that has no items.  The uniqueness of
&%NullList follows from the extensionality of &%Lists, i.e. the fact that
two &%Lists with the same items in the same order are identical.")

(<=>
   (equal ?LIST NullList)
   (and
      (instance ?LIST List)
      (not
         (exists (?ITEM)
            (inList ?ITEM ?LIST)))))

(instance ListFn Function)
(instance ListFn VariableArityRelation)
(instance ListFn TotalValuedRelation)
(domain ListFn 1 Entity)
(range ListFn List)
(documentation ListFn "A &%Function that takes any number of arguments and
returns the &%List containing those arguments in exactly the same order.")

(=>
   (exhaustiveDecomposition ?CLASS @ROW)
   (forall (?OBJ)
      (=>
         (instance ?OBJ ?CLASS)
         (exists (?ITEM)
            (and
               (inList ?ITEM (ListFn @ROW))
               (instance ?OBJ ?ITEM))))))

(=>
   (disjointDecomposition ?CLASS @ROW)
   (forall (?ITEM)
      (=>
         (inList ?ITEM (ListFn @ROW))
         (subclass ?ITEM ?CLASS))))

(=>
   (disjointDecomposition ?CLASS @ROW)
   (forall (?ITEM1 ?ITEM2)
      (=>
         (and
            (inList ?ITEM1 (ListFn @ROW))
            (inList ?ITEM2 (ListFn @ROW))
            (not
               (equal ?ITEM1 ?ITEM2)))
         (disjoint ?ITEM1 ?ITEM2))))

(instance ListOrderFn BinaryFunction)
(instance ListOrderFn PartialValuedRelation)
(domain ListOrderFn 1 List)
(domain ListOrderFn 2 PositiveInteger)
(range ListOrderFn Entity)
(documentation ListOrderFn "(&%ListOrderFn ?LIST ?NUMBER) denotes the item
that is in the ?NUMBER position in the &%List ?LIST.  For example,
(&%ListOrderFn (&%ListFn &%Monday &%Tuesday &%Wednesday) 2) would return the
value &%Tuesday.")

(=>
   (and
      (instance ?LIST1 List)
      (instance ?LIST2 List)
      (forall (?NUMBER)
         (equal (ListOrderFn ?LIST1 ?NUMBER) (ListOrderFn ?LIST2 ?NUMBER))))
   (equal ?LIST1 ?LIST2))

(=>
   (and
      (domain ?REL ?NUMBER ?CLASS)
      (holds ?REL @ROW))
   (instance (ListOrderFn (ListFn @ROW) ?NUMBER) ?CLASS))

(=>
   (and
      (domainSubclass ?REL ?NUMBER ?CLASS)
      (holds ?REL @ROW))
   (subclass (ListOrderFn (ListFn @ROW) ?NUMBER) ?CLASS))

(instance ListLengthFn UnaryFunction)
(instance ListLengthFn TotalValuedRelation)
(domain ListLengthFn 1 List)
(range ListLengthFn NonnegativeInteger)
(documentation ListLengthFn "A &%Function that takes a &%List as its sole
argument and returns the number of items in the &%List.  For example,
(&%ListLengthFn (&%ListFn &%Monday &%Tuesday &%Wednesday)) would return the
value 3.")

(=>
   (and
      (equal (ListLengthFn ?LIST) ?NUMBER1)
      (instance ?LIST List)
      (instance ?NUMBER1 PositiveInteger))
   (forall (?NUMBER2)
      (<=>
         (exists (?ITEM)
            (and
               (equal (ListOrderFn ?LIST ?NUMBER2) ?ITEM)
               (inList ?ITEM ?LIST)))
         (lessThanOrEqualTo ?NUMBER2 ?NUMBER1))))

(equal (ListLengthFn (ListFn @ROW ?ITEM)) (SuccessorFn (ListLengthFn (ListFn @ROW))))

(equal (ListOrderFn (ListFn @ROW ?ITEM) (ListLengthFn (ListFn @ROW ?ITEM))) ?ITEM)

(=>
   (valence ?REL ?NUMBER)
   (forall (@ROW)
      (=>
         (holds ?REL @ROW)
         (equal (ListLengthFn (ListFn @ROW)) ?NUMBER))))

(=>
   (and
      (equal (ListLengthFn ?LIST1) ?NUMBER)
      (instance ?LIST List)
      (instance ?NUMBER1 PositiveInteger))
   (exists (?LIST2 ?ITEM)
      (and
         (initialList ?LIST1 ?LIST2)
         (equal (SuccessorFn ?NUMBER) (ListLengthFn ?LIST2))
         (equal (ListOrderFn ?LIST2 (SuccessorFn ?NUMBER)) ?ITEM))))

(instance ListConcatenateFn BinaryFunction)
(instance ListConcatenateFn TotalValuedRelation)
(domain ListConcatenateFn 1 List)
(domain ListConcatenateFn 2 List)
(range ListConcatenateFn List)
(documentation ListConcatenateFn "A &%Function that returns the concatenation
of the two &%Lists that are given as arguments.  For example, the value of
(&%ListConcatenateFn (&%ListFn &%Monday &%Tuesday) (&%ListFn &%Wednesday
&%Thursday)) would be (&%ListFn &%Monday &%Tuesday &%Wednesday &%Thursday).")

(<=>
   (equal ?LIST3 (ListConcatenateFn ?LIST1 ?LIST2))
   (forall (?NUMBER1 ?NUMBER2)
      (=>
         (and
            (lessThanOrEqualTo ?NUMBER1 (ListLengthFn ?LIST1))
            (lessThanOrEqualTo ?NUMBER2 (ListLengthFn ?LIST2))
            (instance ?NUMBER1 PositiveInteger)
            (instance ?NUMBER2 PositiveInteger))
         (and
            (equal (ListOrderFn ?LIST3 ?NUMBER1) (ListOrderFn ?LIST1 ?NUMBER1))
            (equal (ListOrderFn ?LIST3 (AdditionFn (ListLengthFn ?LIST1) ?NUMBER2)) (ListOrderFn ?LIST2 ?NUMBER2))))))

(instance inList BinaryPredicate)
(instance inList IrreflexiveRelation)
(instance inList AsymmetricRelation)
(domain inList 1 Entity)
(domain inList 2 List)
(documentation inList "The analog of &%element and &%instance for &%Lists.
(&%inList ?OBJ ?LIST) means that ?OBJ is in the &%List ?LIST.  For example,
(&%inList &%Tuesday (&%ListFn &%Monday &%Tuesday &%Wednesday)) would be true.")

(=>
   (inList ?ITEM ?LIST)
   (exists (?NUMBER)
      (equal (ListOrderFn ?LIST ?NUMBER) ?ITEM)))

(instance subList BinaryPredicate)
(instance subList PartialOrderingRelation)
(domain subList 1 List)
(domain subList 2 List)
(documentation subList "(&%subList ?LIST1 ?LIST2) means that ?LIST1 is a
sublist of ?LIST2, i.e. every element of ?LIST1 is an element of ?LIST2 and
the elements that are common to both &%Lists have the same order in both
&%Lists.")

(=>
   (subList ?LIST1 ?LIST2)
   (forall (?ITEM)
      (=>
         (inList ?ITEM ?LIST1)
         (inList ?ITEM ?LIST2))))

(=>
   (subList ?LIST1 ?LIST2)
   (exists (?NUMBER3)
      (forall (?ITEM)
         (=>
            (inList ?ITEM ?LIST1)
            (exists (?NUMBER1 ?NUMBER2)
               (and
                  (equal (ListOrderFn ?LIST1 ?NUMBER1) ?ITEM)
                  (equal (ListOrderFn ?LIST2 ?NUMBER2) ?ITEM)
                  (equal ?NUMBER2 (AdditionFn ?NUMBER1 ?NUMBER3))))))))

(instance initialList BinaryPredicate)
(instance initialList PartialOrderingRelation)
(subrelation initialList subList)
(documentation initialList "(&%initialList ?LIST1 ?LIST2) means that ?LIST1
is a &%subList of ?LIST2 and (&%ListOrderFn ?LIST1 ?NUMBER) returns the same
value as (&%ListOrderFn ?LIST2 ?NUMBER) for all of the values of ?NUMBER over
which (&%ListOrderFn ?LIST1 ?NUMBER) is defined.")

(=>
   (initialList ?LIST1 ?LIST2)
   (forall (?NUMBER1 ?NUMBER2)
      (=>
         (and
            (equal (ListLengthFn ?LIST1) ?NUMBER1)
            (lessThanOrEqualTo ?NUMBER2 ?NUMBER1))
         (equal (ListOrderFn ?LIST1 ?NUMBER2) (ListOrderFn ?LIST2 ?NUMBER2)))))

(initialList (ListFn @ROW) (ListFn @ROW ?ITEM))

(subclass Predicate Relation)
(instance Predicate InheritableRelation)
(documentation Predicate "A &%Predicate is a sentence-forming &%Relation.
Each tuple in the &%Relation is a finite, ordered sequence of objects.
The fact that a particular tuple is an element of a &%Predicate is denoted
by '(*predicate* arg_1 arg_2 .. arg_n)', where the arg_i are the
objects so related.  In the case of &%BinaryPredicates, the fact can
be read as `arg_1 is *predicate* arg_2' or `a *predicate* of
arg_1 is arg_2'.")

(subclass Function SingleValuedRelation)
(instance Function InheritableRelation)
(documentation Function "A &%Function is a term-forming &%Relation that
maps from a n-tuple of arguments to a range and that associates this
n-tuple with at most one range element.  Note that the range is a &%SetOrClass,
and each element of the range is an instance of the &%SetOrClass.")

(subclass UnaryFunction Function)
(subclass UnaryFunction BinaryRelation)
(instance UnaryFunction InheritableRelation)
(documentation UnaryFunction "The &%Class of &%Functions that require a
single argument.")

(=>
   (instance ?FUNCTION UnaryFunction)
   (valence ?FUNCTION 1))

(subclass OneToOneFunction UnaryFunction)
(documentation OneToOneFunction "The &%Class of &%UnaryFunctions which
are one to one.  A function F is one to one just in case for all X, Y in the
domain of F, if X is not identical to Y, then F(X) is not identical to F(Y).")

(=>
   (instance ?FUN OneToOneFunction)
   (forall (?ARG1 ?ARG2)
      (=>
         (and
            (domain ?FUN 1 ?CLASS)
            (instance ?ARG1 ?CLASS)
            (instance ?ARG2 ?CLASS)
            (not (equal ?ARG1 ?ARG2)))
         (not (equal (AssignmentFn ?FUN ?ARG1) (AssignmentFn ?FUN ?ARG2))))))

(subclass SequenceFunction OneToOneFunction)
(documentation SequenceFunction "The &%Class of &%OneToOneFunctions whose range
is a subclass of the &%PositiveIntegers.")

(=>
   (and
      (instance ?SEQ SequenceFunction)
      (range ?SEQ ?CLASS))
   (subclass ?CLASS Integer))

(subclass BinaryFunction Function)
(subclass BinaryFunction TernaryRelation)
(instance BinaryFunction InheritableRelation)
(documentation BinaryFunction "The &%Class of &%Functions that require
two arguments.")

(=>
   (instance ?FUNCTION BinaryFunction)
   (valence ?FUNCTION 2))

(subclass AssociativeFunction BinaryFunction)
(documentation AssociativeFunction "A &%BinaryFunction is associative if
bracketing has no effect on the value returned by the &%Function.  More
precisely, a &%Function ?FUNCTION is associative just in case
(?FUNCTION ?INST1 (?FUNCTION ?INST2 ?INST3)) is equal to
(?FUNCTION (?FUNCTION ?INST1 ?INST2) ?INST3), for all ?INST1, ?INST2,
and ?INST3.")

(=>
   (instance ?FUNCTION AssociativeFunction)
   (forall (?INST1 ?INST2 ?INST3)
      (=>
         (and
            (domain ?FUNCTION 1 ?CLASS)
            (instance ?INST1 ?CLASS)
            (instance ?INST2 ?CLASS)
            (instance ?INST3 ?CLASS))
         (equal (AssignmentFn ?FUNCTION ?INST1 (AssignmentFn ?FUNCTION ?INST2 ?INST3))
             (AssignmentFn ?FUNCTION (AssignmentFn ?FUNCTION ?INST1 ?INST2) ?INST3)))))

(subclass CommutativeFunction BinaryFunction)
(documentation CommutativeFunction "A &%BinaryFunction is commutative if
the ordering of the arguments of the function has no effect on the value
returned by the function.  More precisely, a function ?FUNCTION is
commutative just in case (?FUNCTION ?INST1 ?INST2) is equal to (?FUNCTION
?INST2 ?INST1), for all ?INST1 and ?INST2.")

(=>
   (instance ?FUNCTION CommutativeFunction)
   (forall (?INST1 ?INST2)
      (=>
         (and
            (domain ?FUNCTION 1 ?CLASS)
            (instance ?INST1 ?CLASS)
            (instance ?INST2 ?CLASS))
         (equal (AssignmentFn ?FUNCTION ?INST1 ?INST2)
                (AssignmentFn ?FUNCTION ?INST2 ?INST1)))))

(subclass TernaryFunction Function)
(subclass TernaryFunction QuaternaryRelation)
(instance TernaryFunction InheritableRelation)
(documentation TernaryFunction "The &%Class of &%Functions that require
exactly three arguments.")

(=>
   (instance ?FUNCTION TernaryFunction)
   (valence ?FUNCTION 3))

(subclass QuaternaryFunction Function)
(subclass QuaternaryFunction QuintaryRelation)
(instance QuaternaryFunction InheritableRelation)
(documentation QuaternaryFunction "The &%Class of &%Functions that require
exactly four arguments.")

(=>
   (instance ?FUNCTION QuaternaryFunction)
   (valence ?FUNCTION 4))

(subclass ContinuousFunction Function)
(documentation ContinuousFunction "&%Functions which are continuous.
This concept is taken as primitive until representations for limits
are devised.")

(subclass LogicalOperator Predicate)
(documentation LogicalOperator "This &%Class currently comprises all
of the logical operators (viz. 'and', 'or', 'not', '=>', and '<=>').")

(subclass BinaryPredicate Predicate)
(subclass BinaryPredicate BinaryRelation)
(instance BinaryPredicate InheritableRelation)
(documentation BinaryPredicate "A &%Predicate relating two items - its
valence is two.")

(=>
   (instance ?REL BinaryPredicate)
   (valence ?REL 2))

(subclass TernaryPredicate Predicate)
(subclass TernaryPredicate TernaryRelation)
(instance TernaryPredicate InheritableRelation)
(documentation TernaryPredicate "The &%Class of &%Predicates that require
exactly three arguments.")

(=>
   (instance ?REL TernaryPredicate)
   (valence ?REL 3))

(subclass QuaternaryPredicate Predicate)
(subclass QuaternaryPredicate QuaternaryRelation)
(instance QuaternaryPredicate InheritableRelation)
(documentation QuaternaryPredicate "The &%Class of &%Predicates that
require four arguments.")

(=>
   (instance ?REL QuaternaryPredicate)
   (valence ?REL 4))

(subclass QuintaryPredicate Predicate)
(subclass QuintaryPredicate QuintaryRelation)
(instance QuintaryPredicate InheritableRelation)
(documentation QuintaryPredicate "The &%Class of &%Predicates that
require five arguments.")

(=>
   (instance ?REL QuintaryPredicate)
   (valence ?REL 5))

(subclass VariableArityRelation Relation)
(documentation VariableArityRelation "The &%Class of &%Relations that
do not have a fixed number of arguments.")

(=>
        (instance ?REL VariableArityRelation)
        (not
           (exists (?INT)
              (valence ?REL ?INT))))

(subclass RelationExtendedToQuantities Relation)
(instance RelationExtendedToQuantities InheritableRelation)
(documentation RelationExtendedToQuantities "A
&%RelationExtendedToQuantities is a &%Relation that, when it is true on
a sequence of arguments that are &%RealNumbers, it is also true on a
sequence of &%ConstantQuantites with those magnitudes in some unit of
measure.  For example, the &%lessThan relation is extended to quantities.
This means that for all pairs of quantities ?QUANTITY1 and ?QUANTITY2,
(lessThan ?QUANTITY1 ?QUANTITY2) if and only if, for some ?NUMBER1,
?NUMBER2, and ?UNIT, ?QUANTITY1 = (MeasureFn ?NUMBER1 ?UNIT),
?QUANTITY2 = (MeasureFn ?NUMBER2 ?UNIT), and (lessThan ?NUMBER1 ?NUMBER2),
for all units ?UNIT on which ?QUANTITY1 and ?QUANTITY2 can be measured.
Note that, when a &%RelationExtendedToQuantities is extended from
&%RealNumbers to &%ConstantQuantities, the &%ConstantQuantities must be
measured along the same physical dimension.")

(subclass Proposition Abstract)
(documentation Proposition "&%Propositions are &%Abstract entities that
express a complete thought or a set of such thoughts.  As an example,
the formula '(instance Yojo Cat)' expresses the &%Proposition that the
entity named Yojo is an element of the &%Class of Cats.  Note that
propositions are not restricted to the content expressed by individual
sentences of a &%Language.  They may encompass the content expressed by
theories, books, and even whole libraries.  It is important to distinguish
&%Propositions from the &%ContentBearingObjects that express them.  A
&%Proposition is a piece of information, e.g. that the cat is on the mat,
but a &%ContentBearingObject is an &%Object that represents this information.
A &%Proposition is an abstraction that may have multiple representations:
strings, sounds, icons, etc.  For example, the &%Proposition that the cat is
on the mat is represented here as a string of graphical characters displayed
on a monitor and/or printed on paper, but it can be represented by a sequence
of sounds or by some non-latin alphabet or by some cryptographic form")

(instance closedOn BinaryPredicate)
(instance closedOn AsymmetricRelation)
(domain closedOn 1 Function)
(domain closedOn 2 SetOrClass)
(documentation closedOn "A &%BinaryFunction is closed on a &%SetOrClass
if it is defined for all instances of the &%SetOrClass and its value is
always an instance of the &%SetOrClass.")

(=>
   (and
      (closedOn ?FUNCTION ?CLASS)
      (instance ?FUNCTION UnaryFunction))
   (forall (?INST)
      (=>
         (instance ?INST ?CLASS)
         (instance (AssignmentFn ?FUNCTION ?INST) ?CLASS))))

(=>
   (and
      (closedOn ?FUNCTION ?CLASS)
      (instance ?FUNCTION BinaryFunction))
   (forall (?INST1 ?INST2)
      (=>
         (and
            (instance ?INST1 ?CLASS)
            (instance ?INST2 ?CLASS))
         (instance (AssignmentFn ?FUNCTION ?INST1 ?INST2) ?CLASS))))

(instance reflexiveOn BinaryPredicate)
(instance reflexiveOn AsymmetricRelation)
(domain reflexiveOn 1 BinaryRelation)
(domain reflexiveOn 2 SetOrClass)
(documentation reflexiveOn "A &%BinaryRelation is reflexive on a
&%SetOrClass only if every instance of the &%SetOrClass bears the relation
to itself.")

(=>
   (reflexiveOn ?RELATION ?CLASS)
   (forall (?INST)
      (=>
         (instance ?INST ?CLASS)
         (holds ?RELATION ?INST ?INST))))

(instance irreflexiveOn BinaryPredicate)
(instance irreflexiveOn AsymmetricRelation)
(domain irreflexiveOn 1 BinaryRelation)
(domain irreflexiveOn 2 SetOrClass)
(documentation irreflexiveOn "A &%BinaryRelation is irreflexive on a
&%SetOrClass only if no instance of the &%SetOrClass bears the relation to
itself.")

(=>
   (irreflexiveOn ?RELATION ?CLASS)
   (forall (?INST)
      (=>
         (instance ?INST ?CLASS)
         (not
            (holds ?RELATION ?INST ?INST)))))

(instance partialOrderingOn BinaryPredicate)
(instance partialOrderingOn AsymmetricRelation)
(domain partialOrderingOn 1 BinaryRelation)
(domain partialOrderingOn 2 SetOrClass)
(documentation partialOrderingOn "A &%BinaryRelation is a partial
ordering on a &%SetOrClass only if the relation is &%reflexiveOn the
&%SetOrClass, and it is both an &%AntisymmetricRelation, and a
&%TransitiveRelation.")

(=>
   (partialOrderingOn ?RELATION ?CLASS)
   (and
      (reflexiveOn ?RELATION ?CLASS)
      (instance ?RELATION TransitiveRelation)
      (instance ?RELATION AntisymmetricRelation)))

(instance totalOrderingOn BinaryPredicate)
(instance totalOrderingOn AsymmetricRelation)
(domain totalOrderingOn 1 BinaryRelation)
(domain totalOrderingOn 2 SetOrClass)
(documentation totalOrderingOn "A &%BinaryRelation ?REL is a total
ordering on a &%SetOrClass only if it is a partial ordering for which either
(?REL ?INST1 ?INST2) or (?REL ?INST2 ?INST1) for every ?INST1 and ?INST2
in the &%SetOrClass.")

(<=>
     (totalOrderingOn ?RELATION ?CLASS)
     (and
          (partialOrderingOn ?RELATION ?CLASS)
          (trichotomizingOn ?RELATION ?CLASS)))

(instance trichotomizingOn BinaryPredicate)
(instance trichotomizingOn AsymmetricRelation)
(domain trichotomizingOn 1 BinaryRelation)
(domain trichotomizingOn 2 SetOrClass)
(documentation trichotomizingOn "A &%BinaryRelation ?REL is
trichotomizing on a &%SetOrClass only if, for all instances ?INST1 and ?INST2
of the &%SetOrClass, at least one of the following holds:  (?REL ?INST1 ?INST2),
(?REL ?INST2 ?INST1) or (equal ?INST1 ?INST2).")

(=>
   (trichotomizingOn ?RELATION ?CLASS)
   (forall (?INST1 ?INST2)
      (=>
         (and
            (instance ?INST1 ?CLASS)
            (instance ?INST2 ?CLASS))
         (or
            (holds ?RELATION ?INST1 ?INST2)
            (holds ?RELATION ?INST2 ?INST1)
            (equal ?INST1 ?INST2)))))

(instance equivalenceRelationOn BinaryPredicate)
(instance equivalenceRelationOn AsymmetricRelation)
(domain equivalenceRelationOn 1 BinaryRelation)
(domain equivalenceRelationOn 2 SetOrClass)
(documentation equivalenceRelationOn "A &%BinaryRelation is an
&%equivalenceRelationOn a &%SetOrClass only if the relation is &%reflexiveOn
the &%SetOrClass and it is both a &%TransitiveRelation and a
&%SymmetricRelation.")

(=>
   (equivalenceRelationOn ?RELATION ?CLASS)
   (and
      (instance ?RELATION TransitiveRelation)
      (instance ?RELATION SymmetricRelation)
      (reflexiveOn ?RELATION ?CLASS)))

(instance distributes BinaryPredicate)
(instance distributes BinaryRelation)
(domain distributes 1 BinaryFunction)
(domain distributes 2 BinaryFunction)
(documentation distributes "A &%BinaryFunction ?FUNCTION1 is
distributive over another &%BinaryFunction ?FUNCTION2 just in case
(?FUNCTION1 ?INST1 (?FUNCTION2 ?INST2 ?INST3)) is equal to
(?FUNCTION2 (?FUNCTION1 ?INST1 ?INST2) (?FUNCTION1 ?INST1 ?INST3)),
for all ?INST1, ?INST2, and ?INST3.")

(=>
   (distributes ?FUNCTION1 ?FUNCTION2)
   (forall (?INST1 ?INST2 ?INST3)
      (=>
         (and
            (domain ?FUNCTION1 1 ?CLASS1)
            (instance ?INST1 ?CLASS1)
            (instance ?INST2 ?CLASS1)
            (instance ?INST3 ?CLASS1)
            (domain ?FUNCTION2 1 ?CLASS2)
            (instance ?INST1 ?CLASS2)
            (instance ?INST2 ?CLASS2)
            (instance ?INST3 ?CLASS2))
         (equal (AssignmentFn ?FUNCTION1 ?INST1
                        (AssignmentFn ?FUNCTION2 ?INST2 ?INST3))
                (AssignmentFn ?FUNCTION2
                        (AssignmentFn ?FUNCTION1 ?INST1 ?INST2)
                        (AssignmentFn ?FUNCTION1 ?INST1 ?INST3))))))

(instance causes BinaryPredicate)
(instance causes AsymmetricRelation)
(domain causes 1 Process)
(domain causes 2 Process)
(relatedInternalConcept causes causesSubclass)
(documentation causes "The causation relation between instances of &%Process.
(&%causes ?PROCESS1 ?PROCESS2) means that the instance of &%Process ?PROCESS1
brings about the instance of &%Process ?PROCESS2, e.g. (&%causes &%Killing &%Death).")

(=>
   (instance ?PROC1 Process)
   (exists (?PROC2)
      (causes ?PROC2 ?PROC1)))

(instance causesSubclass BinaryPredicate)
(instance causesSubclass AsymmetricRelation)
(domainSubclass causesSubclass 1 Process)
(domainSubclass causesSubclass 2 Process)
(documentation causesSubclass "The causation relation between subclasses of &%Process.
(&%causesSubclass ?PROCESS1 ?PROCESS2) means that the subclass of &%Process ?PROCESS1
brings about the subclass of &%Process ?PROCESS2, e.g. (&%causes &%Killing &%Death).")

(=>
   (causesSubclass ?PROC1 ?PROC2)
   (forall (?INST2)
      (=>
         (instance ?INST2 ?PROC2)
         (exists (?INST1)
   	(and
   	   (instance ?INST1 ?PROC1)
   	   (causes ?INST1 ?INST2))))))

(instance copy BinaryPredicate)
(instance copy EquivalenceRelation)
(domain copy 1 Object)
(domain copy 2 Object)
(documentation copy "relates an &%Object to an exact copy of the
&%Object, where an exact copy is indistinguishable from the original
with regard to every property except (possibly) spatial and/or temporal
location.")

(=>
   (copy ?OBJ1 ?OBJ2)
   (forall (?ATTR)
      (=>
         (attribute ?OBJ1 ?ATTR)
         (attribute ?OBJ2 ?ATTR))))

(instance time BinaryPredicate)
(instance time TemporalRelation)
(instance time AsymmetricRelation)
(domain time 1 Physical)
(domain time 2 TimePosition)
(documentation time "This relation holds between an instance of
&%Physical and an instance of &%TimePosition just in case the temporal
lifespan of the former includes the latter.  The constants &%located
and &%time are the basic spatial and temporal predicates,
respectively.")

(instance holdsDuring BinaryPredicate)
(instance holdsDuring AsymmetricRelation)
(domain holdsDuring 1 TimePosition)
(domain holdsDuring 2 Formula)
(documentation holdsDuring "(&%holdsDuring ?TIME ?FORMULA) means that the
proposition denoted by ?FORMULA is true in the time frame ?TIME.  Note
that this implies that ?FORMULA is true at every &%TimePoint which is a
&%temporalPart of ?TIME.")

(=>
   (and
      (holdsDuring ?TIME ?SITUATION1)
      (entails ?SITUATION1 ?SITUATION2))
   (holdsDuring ?TIME ?SITUATION2))

(=>
   (holdsDuring ?TIME (not ?SITUATION))
   (not (holdsDuring ?TIME ?SITUATION)))

(instance capability TernaryPredicate)
(domainSubclass capability 1 Process)
(domain capability 2 CaseRole)
(domain capability 3 Object)
(documentation capability "(&%capability ?PROCESS ?ROLE ?OBJ) means
that ?OBJ has the ability to play the role of ?ROLE in &%Processes of
type ?PROCESS.")

(=>
   (and
      (instance ?ROLE CaseRole)
      (holds ?ROLE ?ARG1 ?ARG2)
      (instance ?ARG1 ?PROC)
      (subclass ?PROC Process))
   (capability ?PROC ?ROLE ?ARG2))

(instance exploits BinaryPredicate)
(instance exploits AsymmetricRelation)
(domain exploits 1 Object)
(domain exploits 2 Agent)
(documentation exploits "(&%exploits ?OBJ ?AGENT) means that ?OBJ is used
by ?AGENT as a &%resource in an unspecified instance of &%Process.  This
&%Predicate, as its corresponding axiom indicates, is a composition of the
relations &%agent and &%resource.")

(=>
     (exploits ?OBJ ?AGENT)
     (exists (?PROCESS)
          (and
               (agent ?PROCESS ?AGENT)
               (resource ?PROCESS ?OBJ))))

(instance hasPurpose BinaryPredicate)
(instance hasPurpose AsymmetricRelation)
(domain hasPurpose 1 Physical)
(domain hasPurpose 2 Formula)
(documentation hasPurpose "This &%Predicate expresses the concept of a
conventional goal, i.e. a goal with a neutralized agent's intention.
Accordingly, (&%hasPurpose ?THING ?FORMULA) means that the instance of
&%Physical ?THING has, as its purpose, the &%Proposition expressed by
?FORMULA.  Note that there is an important difference in meaning between
the &%Predicates &%hasPurpose and &%result.  Although the second argument
of the latter can satisfy the second argument of the former,
a conventional goal is an expected and desired outcome, while a result
may be neither expected nor desired.  For example, a machine process may
have outcomes but no goals, aimless wandering may have an outcome but no
goal; a learning process may have goals with no outcomes, and so on.")

(instance hasPurposeForAgent TernaryPredicate)
(domain hasPurposeForAgent 1 Physical)
(domain hasPurposeForAgent 2 Formula)
(domain hasPurposeForAgent 3 CognitiveAgent)
(documentation hasPurposeForAgent "Expresses a cognitive attitude of an
agent with respect to a particular instance of Physical.  More precisely,
(&%hasPurposeForAgent ?THING ?FORMULA ?AGENT) means that the purpose of
?THING for ?AGENT is the proposition expressed by ?FORMULA.  Very complex
issues are involved here.  In particular, the rules of inference of the
first order predicate calculus are not truth-preserving for the second
argument position of this &%Predicate.")

(=>
   (hasPurpose ?THING ?PURPOSE)
   (exists (?AGENT)
      (hasPurposeForAgent ?THING ?PURPOSE ?AGENT)))

(instance hasSkill BinaryPredicate)
(instance hasSkill AsymmetricRelation)
(domainSubclass hasSkill 1 Process)
(domain hasSkill 2 Agent)
(documentation hasSkill "Similar to the &%capability &%Predicate
with the additional restriction that the ability be practised/
demonstrated to some measurable degree.")

(=>
   (hasSkill ?PROC ?AGENT)
   (capability ?PROC agent ?AGENT))

(instance holdsRight BinaryPredicate)
(instance holdsRight AsymmetricRelation)
(domain holdsRight 1 Formula)
(domain holdsRight 2 CognitiveAgent)
(documentation holdsRight "Expresses a relationship between a &%Formula
and a &%CognitiveAgent whereby the &%CognitiveAgent has the right to
bring it about that the &%Formula is true.")

(instance confersRight TernaryPredicate)
(domain confersRight 1 Formula)
(domain confersRight 2 Entity)
(domain confersRight 3 CognitiveAgent)
(documentation confersRight "Expresses the relationship between a &%Formula,
an &%Entity, and a &%CognitiveAgent when the &%Entity authorizes the
&%CognitiveAgent to bring it about that the &%Formula is true.")

(=>
   (confersRight ?FORMULA ?AGENT1 ?AGENT2)
   (holdsRight ?FORMULA ?AGENT2))

(instance holdsObligation BinaryPredicate)
(instance holdsObligation AsymmetricRelation)
(domain holdsObligation 1 Formula)
(domain holdsObligation 2 CognitiveAgent)
(relatedInternalConcept holdsObligation holdsRight)
(documentation holdsObligation "Expresses a relationship between a
&%Formula and a &%CognitiveAgent whereby the &%CognitiveAgent has
the obligation to bring it about that the &%Formula is true.")

(instance confersObligation TernaryPredicate)
(domain confersObligation 1 Formula)
(domain confersObligation 2 Entity)
(domain confersObligation 3 CognitiveAgent)
(relatedInternalConcept confersObligation confersRight)
(documentation confersObligation "Expresses the relationship between a
a &%Formula, an &%Entity, and a &%CognitiveAgent when the &%Entity
obligates the &%CognitiveAgent to bring it about that the &%Formula is
true.")

(=>
   (confersObligation ?FORMULA ?AGENT1 ?AGENT2)
   (holdsObligation ?FORMULA ?AGENT2))

(instance partlyLocated SpatialRelation)
(instance partlyLocated AntisymmetricRelation)
(instance partlyLocated BinaryPredicate)
(domain partlyLocated 1 Physical)
(domain partlyLocated 2 Object)
(documentation partlyLocated "(&%partlyLocated ?THING ?OBJ) means that the
instance of &%Physical ?THING is at least partially located at ?OBJ.  For
example, Istanbul is partly located in Asia and partly located in Europe.
Note that &%partlyLocated is the most basic localization relation:  &%located
is an immediate &%subrelation of &%partlyLocated and &%exactlyLocated is
an immediate &%subrelation of &%located.")

(=>
   (and
      (instance ?OBJ1 Object)
      (partlyLocated ?OBJ1 ?OBJ2))
   (overlapsSpatially ?OBJ1 ?OBJ2))

(=>
   (and
      (instance ?OBJ1 Object)
      (partlyLocated ?OBJ1 ?OBJ2))
   (exists (?SUB)
      (and
         (part ?SUB ?OBJ1)
         (located ?SUB ?OBJ2))))

(instance located AntisymmetricRelation)
(instance located TransitiveRelation)
(subrelation located partlyLocated)
(documentation located "(&%located ?PHYS ?OBJ) means that ?PHYS is &%partlyLocated
at ?OBJ, and there is no &%part or &%subProcess of ?PHYS that is not &%located at
?OBJ.")

(=>
   (located ?OBJ1 ?OBJ2)
   (forall (?SUB)
      (=>
         (part ?SUB ?OBJ1)
         (located ?SUB ?OBJ2))))

(=>
   (located ?PROCESS ?OBJ)
   (forall (?SUB)
      (=>
         (subProcess ?SUB ?PROCESS)
         (located ?SUB ?OBJ))))

(subrelation exactlyLocated located)
(documentation exactlyLocated "The actual, minimal location of an
Object.  This is a subrelation of the more general &%Predicate
&%located.")

(=>
   (exactlyLocated ?OBJ ?REGION)
   (not
      (exists (?OTHEROBJ)
         (and
            (exactlyLocated ?OTHEROBJ ?REGION)
            (not
               (equal ?OTHEROBJ ?OBJ))))))

(instance between SpatialRelation)
(instance between TernaryPredicate)
(domain between 1 Object)
(domain between 2 Object)
(domain between 3 Object)
(documentation between "(between ?OBJ1 ?OBJ2 ?OBJ3) means that ?OBJ2 is
spatially located between ?OBJ1 and ?OBJ3.  Note that this implies that
?OBJ2 is directly between ?OBJ1 and ?OBJ3, i.e. the projections of ?OBJ1
and ?OBJ3 overlap with ?OBJ2.")

(instance traverses SpatialRelation)
(instance traverses BinaryRelation)
(domain traverses 1 Object)
(domain traverses 2 Object)
(documentation traverses "(&%traverses ?OBJ1 ?OBJ2) means that ?OBJ1
crosses or extends across ?OBJ2.  Note that &%crosses and
&%penetrates are subrelations of &%traverses.")

(=>
   (traverses ?OBJ1 ?OBJ2)
   (or
      (crosses ?OBJ1 ?OBJ2)
      (penetrates ?OBJ1 ?OBJ2)))

(subrelation crosses traverses)
(instance crosses AsymmetricRelation)
(instance crosses TransitiveRelation)
(disjointRelation crosses connected)
(documentation crosses "(crosses ?OBJ1 ?OBJ2) means that
&%Object ?OBJ1 &%traverses Object ?OBJ2, without being &%connected
to it.")

(subrelation penetrates traverses)
(subrelation penetrates meetsSpatially)
(instance penetrates AsymmetricRelation)
(instance penetrates IntransitiveRelation)
(documentation penetrates "(penetrates ?OBJ1 ?OBJ2) means that
?OBJ1 is &%connected to ?OBJ2 along at least one whole dimension (length,
width or depth).")

(instance WhereFn BinaryFunction)
(instance WhereFn SpatialRelation)
(instance WhereFn TotalValuedRelation)
(domain WhereFn 1 Physical)
(domain WhereFn 2 TimePoint)
(range WhereFn Region)
(relatedInternalConcept WhereFn WhenFn)
(documentation WhereFn "Maps an &%Object and a &%TimePoint at which the
&%Object exists to the &%Region where the &%Object existed at that
&%TimePoint.")

(<=>
   (equal (WhereFn ?THING ?TIME) ?REGION)
   (holdsDuring ?TIME (exactlyLocated ?THING ?REGION)))

(instance possesses BinaryPredicate)
(instance possesses AsymmetricRelation)
(domain possesses 1 Agent)
(domain possesses 2 Object)
(documentation possesses "&%Relation that holds between an &%Agent and
an &%Object when the &%Agent has ownership of the &%Object.")

(=>
   (possesses ?PERSON ?OBJ)
   (holdsRight (uses ?OBJ ?PERSON) ?PERSON))

(=>
   (and
      (instance ?TIME TimePosition)
      (holdsDuring ?TIME (possesses ?AGENT1 ?OBJ))
      (holdsDuring ?TIME (possesses ?AGENT2 ?OBJ)))
   (equal ?AGENT1 ?AGENT2))

(instance PropertyFn UnaryFunction)
(instance PropertyFn TotalValuedRelation)
(domain PropertyFn 1 Agent)
(range PropertyFn Set)
(documentation PropertyFn "A &%UnaryFunction that maps an &%Agent to the &%Set of &%Property owned by the &%Agent.")

(<=>
   (instance ?OBJ (PropertyFn ?PERSON))
   (possesses ?PERSON ?OBJ))

(instance precondition BinaryPredicate)
(instance precondition AsymmetricRelation)
(instance precondition TransitiveRelation)
(domainSubclass precondition 1 Process)
(domainSubclass precondition 2 Process)
(documentation precondition "A very general &%Predicate.  (&%precondition
?PROC1 ?PROC2) means that an instance of ?PROC2 can exist only if an
instance of ?PROC1 also exists.")

(=>
   (precondition ?PROC1 ?PROC2)
   (=>
      (exists (?INST2) (instance ?INST2 ?PROC2))
      (exists (?INST1) (instance ?INST1 ?PROC1))))

(instance inhibits BinaryPredicate)
(instance inhibits IrreflexiveRelation)
(domainSubclass inhibits 1 Process)
(domainSubclass inhibits 2 Process)
(documentation inhibits "A very general &%Predicate.  (&%inhibits
?PROC1 ?PROC2) means that the &%Process ?PROC1 inhibits or hinders
the occurrence of the &%Process ?PROC2.  For example, obstructing an
object inhibits moving it.  Note that this is a relation between types
of &%Processes, not between instances.")

(=>
   (inhibits ?PROC1 ?PROC2)
   (forall (?TIME ?PLACE)
      (decreasesLikelihood
         (holdsDuring ?TIME (exists (?INST1) (and (instance ?INST1 ?PROC1) (located ?INST1 ?PLACE))))
            (holdsDuring ?TIME (exists (?INST2) (and (instance ?INST2 ?PROC2) (located ?INST2 ?PLACE)))))))

(instance prevents BinaryPredicate)
(instance prevents IrreflexiveRelation)
(domainSubclass prevents 1 Process)
(domainSubclass prevents 2 Process)
(relatedInternalConcept prevents inhibits)
(documentation prevents "A very general &%Predicate.  (&%prevents ?PROC1
?PROC2) means that ?PROC1 prevents the occurrence of ?PROC2.  In other
words, if ?PROC1 is occurring in a particular time and place, ?PROC2
cannot occur at the same time and place.  For example, innoculating
prevents contracting disease.  Note that this is a relation between types
of &%Processes, not between instances.")

(=>
   (prevents ?PROC1 ?PROC2)
   (forall (?TIME ?PLACE)
      (=>
         (holdsDuring ?TIME (exists (?INST1) (and (instance ?INST1 ?PROC1) (located ?INST1 ?PLACE))))
         (not (holdsDuring ?TIME (exists (?INST2) (and (instance ?INST2 ?PROC2) (located ?INST2 ?PLACE))))))))

(instance refers BinaryPredicate)
(domain refers 1 Physical)
(domain refers 2 Entity)
(documentation refers "(&%refers ?OBJ1 ?OBJ2) means that ?OBJ1
mentions or includes a reference to ?OBJ2. Note that &%refers is
more general in meaning than &%represents, because presumably something
can represent something else only if it refers to this other thing.
For example, an article whose topic is a recent change in the price of
oil may refer to many other things, e.g. the general state of the economy,
the weather in California, the prospect of global warming, the options
for alternative energy sources, the stock prices of various oil companies,
etc.")

(subrelation names refers)
(domain names 1 SymbolicString)
(documentation names "(&%names ?STRING ?ENTITY) means that the thing ?ENTITY
has the &%SymbolicString ?STRING as its name.  Note that &%names and &%represents
are the two immediate &%subrelations of &%refers.  The predicate &%names is used
when the referring item is merely a tag without connotative content, while the
predicate &%represents is used for referring items that have such content.")

(subrelation uniqueIdentifier names)
(instance uniqueIdentifier SingleValuedRelation)
(documentation uniqueIdentifier "The class of &%names that uniquely identify
an instance of &%Entity.  Some examples of &%uniqueIdentifiers are the keys
of tables in database applications and the ISBN (International Standard Book
Number).")

(subrelation represents refers)
(documentation represents "A very general semiotics &%Predicate.
(&%represents ?THING ?ENTITY) means that ?THING in some way indicates,
expresses, connotes, pictures, describes, etc. ?ENTITY.  The &%Predicates
&%containsInformation and &%realization are subrelations of &%represents.
Note that &%represents is a subrelation of &%refers, since something can
represent something else only if it refers to this other thing.  See the
documentation string for &%names.")

(instance representsForAgent TernaryPredicate)
(domain representsForAgent 1 Physical)
(domain representsForAgent 2 Entity)
(domain representsForAgent 3 Agent)
(documentation representsForAgent "A very general predicate.
(&%representsForAgent ?THING ?ENTITY ?AGENT) means that the ?AGENT
chooses to use the &%instance of &%Physical ?THING to 'stand for'
?ENTITY.")

(=>
   (representsForAgent ?REP ?ENTITY ?AGENT)
   (represents ?REP ?ENTITY))

(instance representsInLanguage TernaryPredicate)
(domain representsInLanguage 1 LinguisticExpression)
(domain representsInLanguage 2 Entity)
(domain representsInLanguage 3 Language)
(documentation representsInLanguage "A very general predicate.
(&%representsInLanguage ?THING ?ENTITY ?LANGUAGE) means that the
&%LinguisticExpression ?THING stands for ?ENTITY in the &%Language
?LANGUAGE.")

(=>
   (representsInLanguage ?REP ?ENTITY ?LANGUAGE)
   (exists (?AGENT)
      (representsForAgent ?REP ?ENTITY ?AGENT)))

(subrelation equivalentContentClass subsumesContentClass)
(instance equivalentContentClass EquivalenceRelation)
(domainSubclass equivalentContentClass 1 ContentBearingObject)
(domainSubclass equivalentContentClass 2 ContentBearingObject)
(documentation equivalentContentClass "A &%BinaryPredicate that relates two
subclasses of &%ContentBearingObject.  (&%equivalentContentClass ?CLASS1
?CLASS2) means that the content expressed by each instance of ?CLASS1 is
also expressed by each instance of ?CLASS2, and vice versa.  An example
would be the relationship between English and Russian editions of Agatha
Christie's 'Murder on the Orient Express'.  Note that
(&%equivalentContentClass ?CLASS1 ?CLASS2) implies (&%subsumesContentClass
?CLASS1 ?CLASS2) and (&%subsumesContentClass ?CLASS2 ?CLASS1).")

(<=>
   (and
      (subsumesContentClass ?CLASS1 ?CLASS2)
      (subsumesContentClass ?CLASS2 ?CLASS1))
   (equivalentContentClass ?CLASS1 ?CLASS2))

(instance subsumesContentClass BinaryPredicate)
(instance subsumesContentClass PartialOrderingRelation)
(domainSubclass subsumesContentClass 1 ContentBearingObject)
(domainSubclass subsumesContentClass 2 ContentBearingObject)
(documentation subsumesContentClass "A &%BinaryPredicate that relates two
subclasses of &%ContentBearingObject.  (&%subsumesContentClass ?CLASS1
?CLASS2) means that the content expressed by each instance of ?CLASS2 is
also expressed by each instance of ?CLASS1.  Examples include the
relationship between a poem and one of its stanzas or between a book and
one of its chapters.  Note that this is a relation between subclasses of
&%ContentBearingObject, rather than instances.  If one wants to relate
instances, the &%Predicate &%subsumesContentInstance can be used.  Note
that &%subsumesContentClass is needed in many cases.  Consider, for
example, the relation between the King James edition of the Bible and its
Book of Genesis.  This relation holds for every copy of this edition and
not just for a single instance.")

(=>
  (subsumesContentClass ?CLASS1 ?CLASS2)
  (forall (?OBJ2 ?INFO)
    (=>
       (and
          (instance ?OBJ2 ?CLASS2)
          (containsInformation ?OBJ2 ?INFO))
          (exists (?OBJ1)
            (and
              (instance ?OBJ1 ?CLASS1)
              (containsInformation ?OBJ1 ?INFO))))))

(subrelation equivalentContentInstance subsumesContentInstance)
(instance equivalentContentInstance EquivalenceRelation)
(domain equivalentContentInstance 1 ContentBearingObject)
(domain equivalentContentInstance 2 ContentBearingObject)
(relatedInternalConcept equivalentContentInstance equivalentContentClass)
(documentation equivalentContentInstance "A &%BinaryPredicate relating two
instances of &%ContentBearingObject.  (&%equivalentContentInstance
?OBJ1 ?OBJ2) means that the content expressed by ?OBJ1 is identical to
the content expressed by ?OBJ2.  An example would be the relationship
between a handwritten draft of a letter to one's lawyer and a typed
copy of the same letter.  Note that (&%equivalentContentInstance ?OBJ1
?OBJ2) implies (&%subsumesContentInstance ?OBJ1 ?OBJ2) and
(&%subsumesContentInstance ?OBJ2 ?OBJ2).")

(<=>
   (and
      (subsumesContentInstance ?OBJ1 ?OBJ2)
      (subsumesContentInstance ?OBJ2 ?OBJ1))
   (equivalentContentInstance ?OBJ1 ?OBJ2))

(instance subsumesContentInstance BinaryPredicate)
(instance subsumesContentInstance PartialOrderingRelation)
(domain subsumesContentInstance 1 ContentBearingObject)
(domain subsumesContentInstance 2 ContentBearingObject)
(relatedInternalConcept subsumesContentInstance subsumesContentClass)
(documentation subsumesContentInstance "A &%BinaryPredicate relating two
instances of &%ContentBearingObject.  (&%subsumesContentInstance ?OBJ1 ?OBJ2)
means that the content expressed by ?OBJ2 is part of the content expressed
by ?OBJ1.  An example is the relationship between a handwritten poem and
one of its stanzas.  Note that this is a relation between instances,
rather than &%Classes.  If one wants to assert a content relationship
between &%Classes, e.g. between the version of an intellectual work and a
part of that work, the relation &%subsumesContentClass should be used.")

(=>
   (subsumesContentInstance ?OBJ1 ?OBJ2)
   (forall (?INFO)
      (=>
         (containsInformation ?OBJ2 ?INFO)
         (containsInformation ?OBJ1 ?INFO))))

(subrelation realization represents)
(instance realization AsymmetricRelation)
(domain realization 1 Process)
(domain realization 2 Proposition)
(relatedInternalConcept realization equivalentContentInstance)
(relatedInternalConcept realization containsInformation)
(documentation realization "A subrelation of &%represents.
(&%realization ?PROCESS ?PROP) means that ?PROCESS is a Process which
expresses the content of ?PROP. Examples include a particular musical
performance, which realizes the content of a musical score, or the
reading of a poem.")

(=>
   (realization ?PROCESS ?PROP)
   (exists (?OBJ)
      (and
         (instance ?OBJ ContentBearingObject)
         (containsInformation ?OBJ ?PROP))))

(instance expressedInLanguage BinaryPredicate)
(instance expressedInLanguage AsymmetricRelation)
(domain expressedInLanguage 1 LinguisticExpression)
(domain expressedInLanguage 2 Language)
(documentation expressedInLanguage "(&%expressedInLanguage ?EXPRESS ?LANG)
means that ?EXPRESS is expressed in &%Language ?LANG.")

(<=>   
   (expressedInLanguage ?EXPRESS ?LANGUAGE)
   (exists (?PROP)
      (representsInLanguage ?EXPRESS ?PROP ?LANGUAGE)))

(instance subProposition BinaryPredicate)
(instance subProposition TransitiveRelation)
(instance subProposition IrreflexiveRelation)
(domain subProposition 1 Proposition)
(domain subProposition 2 Proposition)
(documentation subProposition "(&%subProposition ?PROP1 ?PROP2) means that
?PROP1 is a &%Proposition which is a proper part of the &%Proposition ?PROP2.
In other words, &%subProposition is the analogue of &%properPart for chunks
of abstract content.")

(=>
   (subProposition ?PROP1 ?PROP2)
   (forall (?OBJ1 ?OBJ2)
      (=>
         (and
            (containsInformation ?OBJ1 ?PROP1)
            (containsInformation ?OBJ2 ?PROP2))
         (subsumesContentInstance ?OBJ2 ?OBJ1))))

(subrelation subPlan subProposition)
(instance subPlan TransitiveRelation)
(instance subPlan IrreflexiveRelation)
(domain subPlan 1 Plan)
(domain subPlan 2 Plan)
(documentation subPlan "(&%subPlan ?PLAN1 ?PLAN2) means that ?PLAN1
is a &%Plan which is a proper part of ?PLAN2.  This relation is generally
used to relate a supporting &%Plan to the overall &%Plan in a particular
context.")

(instance uses BinaryPredicate)
(instance uses AsymmetricRelation)
(domain uses 1 Object)
(domain uses 2 Agent)
(documentation uses "(&%uses ?OBJECT AGENT) means that ?OBJECT is used by
?AGENT as an instrument in an unspecified &%Process.  This &%Predicate,
as its corresponding axiom indicates, is a composition of the &%CaseRoles
&%agent and &%instrument.")

(=>
     (uses ?OBJ ?AGENT)
     (exists (?PROC)
          (and
               (agent ?PROC ?AGENT)
               (instrument ?PROC ?OBJ))))

;; END FILE

;; <module>NUMERIC_FUNCTIONS</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  NUMERIC FUNCTIONS   ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'STRUCTURAL ONTOLOGY'
;; INCLUDES 'BASE ONTOLOGY'

(instance MultiplicationFn BinaryFunction)
(instance MultiplicationFn AssociativeFunction)
(instance MultiplicationFn CommutativeFunction)
(instance MultiplicationFn RelationExtendedToQuantities)
(instance MultiplicationFn TotalValuedRelation)
(domain MultiplicationFn 1 Quantity)
(domain MultiplicationFn 2 Quantity)
(range MultiplicationFn Quantity)
(identityElement MultiplicationFn 1)
(documentation MultiplicationFn "If ?NUMBER1 and ?NUMBER2 are &%Numbers,
then (&%MultiplicationFn ?NUMBER1 ?NUMBER2) is the arithmetical product
of these numbers.")

(instance AdditionFn BinaryFunction)
(instance AdditionFn AssociativeFunction)
(instance AdditionFn CommutativeFunction)
(instance AdditionFn RelationExtendedToQuantities)
(instance AdditionFn TotalValuedRelation)
(domain AdditionFn 1 Quantity)
(domain AdditionFn 2 Quantity)
(range AdditionFn Quantity)
(identityElement AdditionFn 0)
(documentation AdditionFn "If ?NUMBER1 and ?NUMBER2 are &%Numbers, then
(&%AdditionFn ?NUMBER1 ?NUMBER2) is the arithmetical sum of these
numbers.")

(equal (SuccessorFn ?NUMBER) (AdditionFn ?NUMBER 1))

(instance SubtractionFn BinaryFunction)
(instance SubtractionFn AssociativeFunction)
(instance SubtractionFn RelationExtendedToQuantities)
(instance SubtractionFn TotalValuedRelation)
(domain SubtractionFn 1 Quantity)
(domain SubtractionFn 2 Quantity)
(range SubtractionFn Quantity)
(identityElement SubtractionFn 0)
(documentation SubtractionFn "If ?NUMBER1 and ?NUMBER2 are &%Numbers,
then (&%SubtractionFn ?NUMBER1 ?NUMBER2) is the arithmetical difference
between ?NUMBER1 and ?NUMBER2, i.e. ?NUMBER1 minus ?NUMBER2.  An
exception occurs when ?NUMBER1 is equal to 0, in which case
(&%SubtractionFn ?NUMBER1 ?NUMBER2) is the negation of ?NUMBER2.")

(equal (PredecessorFn ?NUMBER) (SubtractionFn ?NUMBER 1))

(instance DivisionFn BinaryFunction)
(instance DivisionFn AssociativeFunction)
(instance DivisionFn RelationExtendedToQuantities)
(instance DivisionFn PartialValuedRelation)
(domain DivisionFn 1 Quantity)
(domain DivisionFn 2 Quantity)
(range DivisionFn Quantity)
(identityElement DivisionFn 1)
(documentation DivisionFn "If ?NUMBER1 and ?NUMBER2 are &%Numbers, then
(&%DivisionFn ?NUMBER1 ?NUMBER2) is the result of dividing ?NUMBER1 by
?NUMBER2.  An exception occurs when ?NUMBER1 = 1, in which case
(&%DivisionFn ?NUMBER1 ?NUMBER2) is the reciprocal of ?NUMBER2.")

(=>
   (instance ?NUMBER RationalNumber)
   (exists (?INT1 ?INT2)
      (and
         (instance ?INT1 Integer)
         (instance ?INT2 Integer)
         (equal ?NUMBER (DivisionFn ?INT1 ?INT2)))))

(instance AbsoluteValueFn UnaryFunction)
(instance AbsoluteValueFn TotalValuedRelation)
(domain AbsoluteValueFn 1 RealNumber)
(range AbsoluteValueFn NonnegativeRealNumber)
(documentation AbsoluteValueFn "The value of (&%AbsoluteValueFn ?NUMBER)
is the absolute value of the &%RealNumber ?NUMBER.")

(<=>
     (and
         (equal (AbsoluteValueFn ?NUMBER1) ?NUMBER2)
         (instance ?NUMBER1 RealNumber)
         (instance ?NUMBER2 RealNumber))
     (or
         (and
              (instance ?NUMBER1 NonnegativeRealNumber)
              (equal ?NUMBER1 ?NUMBER2))
         (and
              (instance ?NUMBER1 NegativeRealNumber)
              (equal ?NUMBER2 (SubtractionFn 0 ?NUMBER1)))))

(instance CeilingFn UnaryFunction)
(instance CeilingFn TotalValuedRelation)
(domain CeilingFn 1 RealNumber)
(range CeilingFn Integer)
(documentation CeilingFn "(&%CeilingFn ?NUMBER) returns the smallest
&%Integer greater than or equal to the &%RealNumber ?NUMBER.")

(=>
   (equal (CeilingFn ?NUMBER) ?INT)
   (not
      (exists (?OTHERINT)
         (and
            (instance ?OTHERINT Integer)
            (greaterThanOrEqualTo ?OTHERINT ?NUMBER)
            (lessThan ?OTHERINT ?INT)))))

(instance CosineFn UnaryFunction)
(instance CosineFn TotalValuedRelation)
(domain CosineFn 1 PlaneAngleMeasure)
(range CosineFn RealNumber)
(documentation CosineFn "(&%CosineFn ?DEGREE) returns the cosine of the
&%PlaneAngleMeasure ?DEGREE.  The cosine of ?DEGREE is the ratio of the
side next to ?DEGREE to the hypotenuse in a right-angled triangle.")

(instance DenominatorFn UnaryFunction)
(instance DenominatorFn TotalValuedRelation)
(domain DenominatorFn 1 RealNumber)
(range DenominatorFn Integer)
(documentation DenominatorFn "(&%DenominatorFn ?NUMBER) returns the
denominator of the canonical reduced form of the &%RealNumber ?NUMBER.")

(instance ExponentiationFn BinaryFunction)
(instance ExponentiationFn RelationExtendedToQuantities)
(instance ExponentiationFn TotalValuedRelation)
(domain ExponentiationFn 1 Quantity)
(domain ExponentiationFn 2 Integer)
(range ExponentiationFn Quantity)
(documentation ExponentiationFn "(&%ExponentiationFn ?NUMBER ?INT) returns
the &%RealNumber ?NUMBER raised to the power of the &%Integer ?INT.")

(instance FloorFn UnaryFunction)
(instance FloorFn TotalValuedRelation)
(domain FloorFn 1 RealNumber)
(range FloorFn Integer)
(documentation FloorFn "(&%FloorFn ?NUMBER) returns the largest &%Integer
less than or equal to the &%RealNumber ?NUMBER.")

(=>
   (equal (FloorFn ?NUMBER) ?INT)
   (not
      (exists (?OTHERINT)
         (and
            (instance ?OTHERINT Integer)
            (lessThanOrEqualTo ?OTHERINT ?NUMBER)
            (greaterThan ?OTHERINT ?INT)))))

(instance GreatestCommonDivisorFn Function)
(instance GreatestCommonDivisorFn VariableArityRelation)
(instance GreatestCommonDivisorFn PartialValuedRelation)
(domain GreatestCommonDivisorFn 1 Integer)
(range GreatestCommonDivisorFn Integer)
(documentation GreatestCommonDivisorFn "(&%GreatestCommonDivisorFn
?NUMBER1 ?NUMBER2 ... ?NUMBER) returns the greatest common divisor of
?NUMBER1 through ?NUMBER.")

(=>
   (equal (GreatestCommonDivisorFn @ROW) ?NUMBER)
   (forall (?ELEMENT)
      (=>
         (inList ?ELEMENT (ListFn @ROW))
         (equal (RemainderFn ?ELEMENT ?NUMBER) 0))))

(=>
   (equal (GreatestCommonDivisorFn @ROW) ?NUMBER)
   (not (exists (?GREATER)
      (and
         (greaterThan ?GREATER ?NUMBER)
         (forall (?ELEMENT)
            (=>
               (inList ?ELEMENT (ListFn @ROW))
               (equal (RemainderFn ?ELEMENT ?GREATER) 0)))))))

(instance ImaginaryPartFn UnaryFunction)
(instance ImaginaryPartFn TotalValuedRelation)
(domain ImaginaryPartFn 1 ComplexNumber)
(range ImaginaryPartFn ImaginaryNumber)
(documentation ImaginaryPartFn "(&%ImaginaryPartFn ?NUMBER) returns
the part of ?NUMBER that has the square root of -1 as its factor.")

(=>
   (instance ?NUMBER ComplexNumber)
   (exists (?PART1 ?PART2)
      (and
         (equal ?PART1 (RealNumberFn ?NUMBER))
         (equal ?PART2 (ImaginaryPartFn ?NUMBER)))))

(instance IntegerSquareRootFn UnaryFunction)
(instance IntegerSquareRootFn PartialValuedRelation)
(domain IntegerSquareRootFn 1 RealNumber)
(range IntegerSquareRootFn NonnegativeInteger)
(documentation IntegerSquareRootFn "(&%IntegerSquareRootFn ?NUMBER)
returns the integer square root of ?NUMBER.")

(instance LeastCommonMultipleFn Function)
(instance LeastCommonMultipleFn PartialValuedRelation)
(instance LeastCommonMultipleFn VariableArityRelation)
(domain LeastCommonMultipleFn 1 Integer)
(range LeastCommonMultipleFn Integer)
(documentation LeastCommonMultipleFn "(&%LeastCommonMultipleFn
?NUMBER1 ?NUMBER2 ... ?NUMBER) returns the least common multiple of
?NUMBER1 through ?NUMBER.")

(=>
   (equal (LeastCommonMultipleFn @ROW) ?NUMBER)
   (forall (?ELEMENT)
      (=>
         (inList ?ELEMENT (ListFn @ROW))
         (equal (RemainderFn ?NUMBER ?ELEMENT) 0))))

(=>
   (equal (LeastCommonMultipleFn @ROW) ?NUMBER)
   (not (exists (?LESS)
      (and
         (lessThan ?LESS ?NUMBER)
         (forall (?ELEMENT)
            (=>
               (inList ?ELEMENT (ListFn @ROW))
               (equal (RemainderFn ?LESS ?ELEMENT) 0)))))))

(instance LogFn BinaryFunction)
(domain LogFn 1 RealNumber)
(domain LogFn 2 PositiveInteger)
(range LogFn RealNumber)
(documentation LogFn "(LogFn ?NUMBER ?INT) returns the logarithm of the
&%RealNumber ?NUMBER in the base denoted by the &%Integer ?INT.")

(instance MaxFn BinaryFunction)
(instance MaxFn AssociativeFunction)
(instance MaxFn CommutativeFunction)
(instance MaxFn RelationExtendedToQuantities)
(instance MaxFn TotalValuedRelation)
(domain MaxFn 1 Quantity)
(domain MaxFn 2 Quantity)
(range MaxFn Quantity)
(documentation MaxFn "(&%MaxFn ?NUMBER1 ?NUMBER2) is the largest of
?NUMBER1 and ?NUMBER2.  In cases where ?NUMBER1 is equal to ?NUMBER2,
&%MaxFn returns one of its arguments.")

(=>
   (equal (MaxFn ?NUMBER1 ?NUMBER2) ?NUMBER)
   (or
      (and
         (equal ?NUMBER ?NUMBER1)
         (greaterThan ?NUMBER1 ?NUMBER2))
      (and
         (equal ?NUMBER ?NUMBER2)
         (greaterThan ?NUMBER2 ?NUMBER1))
      (and
         (equal ?NUMBER ?NUMBER1)
         (equal ?NUMBER ?NUMBER2))))

(instance MinFn BinaryFunction)
(instance MinFn AssociativeFunction)
(instance MinFn CommutativeFunction)
(instance MinFn RelationExtendedToQuantities)
(instance MinFn TotalValuedRelation)
(domain MinFn 1 Quantity)
(domain MinFn 2 Quantity)
(range MinFn Quantity)
(documentation MinFn "(&%MinFn ?NUMBER1 ?NUMBER2) is the smallest of
?NUMBER1 and ?NUMBER2.  In cases where ?NUMBER1 is equal to ?NUMBER2,
&%MinFn returns one of its arguments.")

(=>
   (equal (MinFn ?NUMBER1 ?NUMBER2) ?NUMBER)
   (or
      (and
         (equal ?NUMBER ?NUMBER1)
         (lessThan ?NUMBER1 ?NUMBER2))
      (and
         (equal ?NUMBER ?NUMBER2)
         (lessThan ?NUMBER2 ?NUMBER1))
      (and
         (equal ?NUMBER ?NUMBER1)
         (equal ?NUMBER ?NUMBER2))))

(instance NumeratorFn UnaryFunction)
(instance NumeratorFn TotalValuedRelation)
(domain NumeratorFn 1 RealNumber)
(range NumeratorFn Integer)
(documentation NumeratorFn "(&%NumeratorFn ?NUMBER) returns the numerator
of the canonical reduced form ?NUMBER.")

(instance Pi PositiveRealNumber)
(documentation Pi "&%Pi is the &%RealNumber that
is the ratio of the perimeter of a circle to its diameter.  It is
approximately equal to 3.141592653589793.")

(instance NumberE PositiveRealNumber)
(documentation NumberE "&%NumberE is the &%RealNumber that is the base for
natural logarithms.  It is approximately equal to 2.718282.")

(instance RationalNumberFn UnaryFunction)
(domain RationalNumberFn 1 Number)
(range RationalNumberFn RationalNumber)
(documentation RationalNumberFn "(&%RationalNumberFn ?NUMBER) returns
the rational representation of ?NUMBER.")

(instance RealNumberFn UnaryFunction)
(domain RealNumberFn 1 Number)
(range RealNumberFn RealNumber)
(documentation RealNumberFn "(RealNumberFn ?NUMBER) returns the part of
?NUMBER that is a &%RealNumber.")

(instance ReciprocalFn UnaryFunction)
(instance ReciprocalFn RelationExtendedToQuantities)
(instance ReciprocalFn TotalValuedRelation)
(domain ReciprocalFn 1 Quantity)
(range ReciprocalFn Quantity)
(documentation ReciprocalFn "(ReciprocalFn ?NUMBER) is the reciprocal
element of ?NUMBER with respect to the multiplication operator
(&%MultiplicationFn), i.e. 1/?NUMBER.  Not all numbers have a reciprocal
element.  For example the number 0 does not.  If a number ?NUMBER has a
reciprocal ?RECIP, then the product of ?NUMBER and ?RECIP will be
1, e.g. 3*1/3 = 1.  The reciprocal of an element is &%equal to
applying the &%ExponentiationFn function to the element to the power
-1.")

(=>
   (instance ?NUMBER Quantity)
   (equal (ReciprocalFn ?NUMBER) (ExponentiationFn ?NUMBER -1)))

(=>
   (instance ?NUMBER Quantity)
   (equal 1 (MultiplicationFn ?NUMBER (ReciprocalFn ?NUMBER))))

(instance RemainderFn BinaryFunction)
(instance RemainderFn RelationExtendedToQuantities)
(instance RemainderFn PartialValuedRelation)
(domain RemainderFn 1 Quantity)
(domain RemainderFn 2 Quantity)
(range RemainderFn Quantity)
(documentation RemainderFn "(RemainderFn ?NUMBER ?DIVISOR) is the
remainder of the number ?NUMBER divided by the number ?DIVISOR.
The result has the same sign as ?DIVISOR.")

(<=>
   (equal (RemainderFn ?NUMBER1 ?NUMBER2) ?NUMBER)
   (equal (AdditionFn (MultiplicationFn (FloorFn (DivisionFn ?NUMBER1 ?NUMBER2)) ?NUMBER2) ?NUMBER) ?NUMBER1))

(=>
   (equal (RemainderFn ?NUMBER1 ?NUMBER2) ?NUMBER)
   (equal (SignumFn ?NUMBER2) (SignumFn ?NUMBER)))


(=>
   (instance ?NUMBER EvenInteger)
   (equal (RemainderFn ?NUMBER 2) 0))

(=>
   (instance ?NUMBER OddInteger)
   (equal (RemainderFn ?NUMBER 2) 1))

(=>
   (instance ?PRIME PrimeNumber)
   (forall (?NUMBER)
      (=>
         (equal (RemainderFn ?PRIME ?NUMBER) 0)
         (or
            (equal ?NUMBER 1)
            (equal ?NUMBER ?PRIME)))))

(instance RoundFn UnaryFunction)
(instance RoundFn RelationExtendedToQuantities)
(instance RoundFn TotalValuedRelation)
(domain RoundFn 1 Quantity)
(range RoundFn Quantity)
(documentation RoundFn "(&%RoundFn ?NUMBER) is the &%Integer closest
to ?NUMBER on the number line.  If ?NUMBER is halfway between two
&%Integers (for example 3.5), it denotes the larger &%Integer.")

(=>
   (equal (RoundFn ?NUMBER1) ?NUMBER2)
   (or
      (=>
         (lessThan (SubtractionFn ?NUMBER1 (FloorFn ?NUMBER1)) 0.5)
         (equal ?NUMBER2 (FloorFn ?NUMBER1)))
      (=>
         (greaterThanOrEqualTo (SubtractionFn ?NUMBER1 (FloorFn ?NUMBER1)) 0.5)
         (equal ?NUMBER2 (CeilingFn ?NUMBER1)))))

(instance SignumFn UnaryFunction)
(instance SignumFn TotalValuedRelation)
(domain SignumFn 1 RealNumber)
(range SignumFn Integer)
(documentation SignumFn "(SignumFn ?NUMBER) denotes the sign of ?NUMBER.
This is one of the following values:  -1, 1, or 0.")

(=>
   (instance ?NUMBER NonnegativeRealNumber)
   (or
      (equal (SignumFn ?NUMBER) 1)
      (equal (SignumFn ?NUMBER) 0)))

(=>
   (instance ?NUMBER PositiveRealNumber)
   (equal (SignumFn ?NUMBER) 1))

(=>
   (instance ?NUMBER NegativeRealNumber)
   (equal (SignumFn ?NUMBER) -1))

(instance SineFn UnaryFunction)
(instance SineFn TotalValuedRelation)
(domain SineFn 1 PlaneAngleMeasure)
(range SineFn RealNumber)
(documentation SineFn "(&%SineFn ?DEGREE) is the sine of the
&%PlaneAngleMeasure ?DEGREE.  The sine of ?DEGREE is the ratio of the side
opposite ?DEGREE to the hypotenuse in a right-angled triangle.")

(instance SquareRootFn UnaryFunction)
(domain SquareRootFn 1 RealNumber)
(range SquareRootFn Number)
(documentation SquareRootFn "(SquareRootFn ?NUMBER) is the principal
square root of ?NUMBER.")

(=>
   (equal (SquareRootFn ?NUMBER1) ?NUMBER2)
   (equal (MultiplicationFn ?NUMBER2 ?NUMBER2) ?NUMBER1))

(instance TangentFn UnaryFunction)
(instance TangentFn TotalValuedRelation)
(domain TangentFn 1 PlaneAngleMeasure)
(range TangentFn RealNumber)
(documentation TangentFn "(&%TangentFn ?DEGREE) is the tangent of the
&%PlaneAngleMeasure ?DEGREE.  The tangent of ?DEGREE is the ratio of
the side opposite ?DEGREE to the side next to ?DEGREE in a right-angled
triangle.")

(=>
   (instance ?DEGREE PlaneAngleMeasure)
   (equal (TangentFn ?DEGREE) (DivisionFn (SineFn ?DEGREE) (CosineFn ?DEGREE))))

(instance identityElement BinaryPredicate)
(instance identityElement AsymmetricRelation)
(domain identityElement 1 BinaryFunction)
(domain identityElement 2 Entity)
(documentation identityElement "An object ?ID is the identity element
for BinaryFunction ?FUNCTION just in case, for every instance ?INST,
applying ?FUNCTION to ?INST and ?ID results in ?INST.")

(=>
   (identityElement ?FUNCTION ?ID)
   (forall (?INST)
      (=>
         (and
            (domain ?FUNCTION 1 ?CLASS)
            (instance ?INST ?CLASS))
         (equal (AssignmentFn ?FUNCTION ?ID ?INST) ?INST))))

(instance SuccessorFn UnaryFunction)
(instance SuccessorFn TotalValuedRelation)
(domain SuccessorFn 1 Integer)
(range SuccessorFn Integer)
(documentation SuccessorFn "A &%UnaryFunction that maps an &%Integer to
its successor, e.g. the successor of 5 is 6.")

(=>
   (equal (SuccessorFn ?INT1) (SuccessorFn ?INT2))
   (equal ?INT1 ?INT2))

(=>
   (instance ?INT Integer)
   (lessThan ?INT (SuccessorFn ?INT)))

(=>
   (and
      (instance ?INT1 Integer)
      (instance ?INT2 Integer))
   (not
      (and
         (lessThan ?INT1 ?INT2)
         (lessThan ?INT2 (SuccessorFn ?INT1)))))

(=>
   (instance ?INT Integer)
   (equal ?INT (SuccessorFn (PredecessorFn ?INT))))

(=>
   (instance ?INT Integer)
   (equal ?INT (PredecessorFn (SuccessorFn ?INT))))

(instance PredecessorFn UnaryFunction)
(instance PredecessorFn TotalValuedRelation)
(domain PredecessorFn 1 Integer)
(range PredecessorFn Integer)
(documentation PredecessorFn "A &%UnaryFunction that maps an &%Integer to
its predecessor, e.g. the predecessor of 5 is 4.")

(=>
   (equal (PredecessorFn ?INT1) (PredecessorFn ?INT2))
   (equal ?INT1 ?INT2))

(=>
   (instance ?INT Integer)
   (greaterThan ?INT (PredecessorFn ?INT)))

(=>
   (and
      (instance ?INT1 Integer)
      (instance ?INT2 Integer))
   (not
      (and
         (lessThan ?INT2 ?INT1)
         (lessThan (PredecessorFn ?INT1) ?INT2))))

;; END FILE

;; <module>SET/CLASS_THEORY</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;     SET/CLASS THEORY      ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'STRUCTURAL ONTOLOGY'
;; INCLUDES 'BASE ONTOLOGY'

;; The following part of the ontology covers set-theoretic predicates
;; and functions.  Most of the content here is taken from the kif-sets
;; ontology (available on the Ontolingua server).

(subrelation subset subclass)
(domain subset 1 Set)
(domain subset 2 Set)
(documentation subset "(subset ?SET1 ?SET2) is true just in case the
&%elements of the &%Set ?SET1 are also &%elements of the &%Set ?SET2.")

(=>
   (subset ?SUBSET ?SET)
   (forall (?ELEMENT)
      (=>
         (element ?ELEMENT ?SUBSET)
         (element ?ELEMENT ?SET))))

(instance element BinaryPredicate)
(instance element AsymmetricRelation)
(instance element IntransitiveRelation)
(subrelation element instance)
(domain element 1 Entity)
(domain element 2 Set)
(documentation element "(element ?ENTITY ?SET) is true just in case
?ENTITY is contained in the &%Set ?SET.  An &%Entity can be an &%element
of another &%Entity only if the latter is a &%Set.")

(=>
   (forall (?ELEMENT)
         (<=>
            (element ?ELEMENT ?SET1)
            (element ?ELEMENT ?SET2)))
   (equal ?SET1 ?SET2))

(instance UnionFn BinaryFunction)
(instance UnionFn TotalValuedRelation)
(domain UnionFn 1 SetOrClass)
(domain UnionFn 2 SetOrClass)
(range UnionFn SetOrClass)
(documentation UnionFn "A &%BinaryFunction that maps two &%SetOrClasses to
the union of these &%SetOrClasses.  An object is an &%element of the union
of two &%SetOrClasses just in case it is an &%instance of either &%SetOrClass.")

(instance IntersectionFn BinaryFunction)
(instance IntersectionFn TotalValuedRelation)
(domain IntersectionFn 1 SetOrClass)
(domain IntersectionFn 2 SetOrClass)
(range IntersectionFn SetOrClass)
(documentation IntersectionFn "A &%BinaryFunction that maps two
%SetOrClasses to the intersection of these &%SetOrClasses.  An object is
an instance of the intersection of two &%SetOrClasses just in case it is
an instance of both of those &%SetOrClasses.")

(instance RelativeComplementFn BinaryFunction)
(instance RelativeComplementFn TotalValuedRelation)
(domain RelativeComplementFn 1 SetOrClass)
(domain RelativeComplementFn 2 SetOrClass)
(range RelativeComplementFn SetOrClass)
(documentation RelativeComplementFn "A &%BinaryFunction that maps two
&%SetOrClasses to the difference between these &%SetOrClasses.  More
precisely, (&%RelativeComplementFn ?CLASS1 ?CLASS2) denotes the instances
of ?CLASS1 that are not also instances of ?CLASS2.")

(instance ComplementFn UnaryFunction)
(instance ComplementFn TotalValuedRelation)
(domain ComplementFn 1 SetOrClass)
(range ComplementFn SetOrClass)
(documentation ComplementFn "The complement of a given &%SetOrClass C is the
&%SetOrClass of all things that are not instances of C.  In other words, an
object is an instance of the complement of a &%SetOrClass C just in case it
is not an instance of C.")

(instance GeneralizedUnionFn UnaryFunction)
(instance GeneralizedUnionFn TotalValuedRelation)
(domainSubclass GeneralizedUnionFn 1 SetOrClass)
(range GeneralizedUnionFn SetOrClass)
(documentation GeneralizedUnionFn "A &%UnaryFunction that takes a &%SetOrClass
of &%Classes as its single argument and returns a &%SetOrClass which is the
merge of all of the &%Classes in the original &%SetOrClass, i.e. the &%SetOrClass
containing just those instances which are instances of an instance of the
original &%SetOrClass.")

(instance GeneralizedIntersectionFn UnaryFunction)
(instance GeneralizedIntersectionFn TotalValuedRelation)
(domainSubclass GeneralizedIntersectionFn 1 SetOrClass)
(range GeneralizedIntersectionFn SetOrClass)
(documentation GeneralizedIntersectionFn "A &%UnaryFunction that takes a
&%SetOrClass of &%Classes as its single argument and returns a &%SetOrClass which
is the intersection of all of the &%Classes in the original &%SetOrClass, i.e.
the &%SetOrClass containing just those instances which are instances of all
instances of the original &%SetOrClass.")

(instance CardinalityFn UnaryFunction)
(instance CardinalityFn TotalValuedRelation)
(instance CardinalityFn AsymmetricRelation)
(domain CardinalityFn 1 (UnionFn SetOrClass Collection))
(range CardinalityFn Number)
(documentation CardinalityFn "(CardinalityFn ?CLASS) returns the
number of instances in the &%SetOrClass or &%Collection ?CLASS.")

(subclass NullSet SetOrClass)
(documentation NullSet "Any &%SetOrClass that contains no instances.")

(=>
   (instance ?SET NullSet)
   (not (exists (?INST) (instance ?INST ?SET))))

(subclass NonNullSet SetOrClass)
(documentation NonNullSet "Any &%SetOrClass that contains at least one
instance.")

(=>
   (instance ?SET NonNullSet)
   (exists (?INST) (instance ?INST ?SET)))

(subclass FiniteSet Set)
(documentation FiniteSet "A &%Set containing a finite number of elements.")

(=>
   (instance ?SET FiniteSet)
   (exists (?NUMBER)
      (and
         (instance ?NUMBER NonnegativeInteger)
         (equal ?NUMBER (CardinalityFn ?SET)))))

(subclass PairwiseDisjointClass SetOrClass)
(documentation PairwiseDisjointClass "A &%SetOrClass is a &%PairwiseDisjointClass
just in case every instance of the &%SetOrClass is either &%equal to or &%disjoint
from every other instance of the &%SetOrClass.")

(=>
   (instance ?SUPERCLASS PairwiseDisjointClass)
   (forall (?CLASS1 ?CLASS2)
      (=>
         (and
            (instance ?CLASS1 ?SUPERCLASS)
            (instance ?CLASS2 ?SUPERCLASS))
         (or
            (equal ?CLASS1 ?CLASS2)
            (disjoint ?CLASS1 ?CLASS2)))))

(subclass MutuallyDisjointClass SetOrClass)
(documentation MutuallyDisjointClass "A &%SetOrClass is a &%MutuallyDisjointClass
just in case there exists nothing which is an instance of all of the instances of
the original &%SetOrClass.")

(=>
   (instance ?CLASS MutuallyDisjointClass)
   (forall (?INST1 ?INST2)
      (=>
         (and
            (instance ?INST1 ?CLASS)
            (instance ?INST2 ?INST1))
         (exists (?INST3)
            (and
               (instance ?INST3 ?CLASS)
               (not (instance ?INST2 ?INST3)))))))

(instance KappaFn BinaryFunction)
(domain KappaFn 1 SymbolicString)
(domain KappaFn 2 Formula)
(range KappaFn Class)
(documentation KappaFn "A class-forming operator that takes two
arguments:  a variable and a formula containing at least one unbound
occurrence of the variable.  The result of applying &%KappaFn to a
variable and a formula is the &%SetOrClass of things that satisfy the formula.
For example, we can denote the &%SetOrClass of prime numbers that are less
than 100 with the following expression:  (KappaFn ?NUMBER
(and (instance ?NUMBER PrimeNumber) (lessThan ?NUMBER 100))).  Note that
the use of this function is discouraged, since there is currently no
axiomatic support for it.")

;; At some point we may be able to make use of 'KappaFn' by implementing a macro
;; that decomposes every occurrence of 'KappaFn' into a complex formula.  For
;; example the macro might replace every instance of Schema 1 with an instance
;; of Schema 2.
;;
;; Schema 1:  (KappaFn <variable> <formula>)
;;
;; Schema 2: (exists (?LIST)
;;	          (and
;;                 (instance ?LIST UniqueList)
;;		       (forall (<variable>)
;;			    (<=>
;;			       (inList <variable> ?LIST)
;;				 <formula>))))
;;


;; END FILE

;; <module>GRAPH_THEORY</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;;;
;;  GRAPH THEORY   ;;
;;;;;;;;;;;;;;;;;;;;;

(subclass Graph Abstract)
(documentation Graph "The &%Class of graphs, where a graph is understood
to be a set of &%GraphNodes connected by &%GraphArcs.  Note that this
&%Class includes only connected graphs, i.e. graphs in which there is a
&%GraphPath between any two &%GraphNodes.  Note too that every &%Graph
is assumed to contain at least two &%GraphArcs and three &%GraphNodes.")

(=>
   (and
      (instance ?GRAPH Graph)
      (instance ?NODE1 GraphNode)
      (instance ?NODE2 GraphNode)
      (graphPart ?NODE1 ?GRAPH)
      (graphPart ?NODE2 ?GRAPH)
      (not (equal ?NODE1 ?NODE2)))
   (exists (?ARC ?PATH)
      (or
         (links ?NODE1 ?NODE2 ?ARC)
         (and
            (subGraph ?PATH ?GRAPH)
            (instance ?PATH GraphPath)
            (or
               (and
                  (equal (BeginNodeFn ?PATH) ?NODE1)
                  (equal (EndNodeFn ?PATH) ?NODE2))
               (and
                  (equal (BeginNodeFn ?PATH) ?NODE2)
                  (equal (EndNodeFn ?PATH) ?NODE1)))))))

(=>
   (instance ?GRAPH Graph)
   (exists (?NODE1 ?NODE2 ?NODE3 ?ARC1 ?ARC2)
      (and
         (graphPart ?NODE1 ?GRAPH)
         (graphPart ?NODE2 ?GRAPH)
         (graphPart ?NODE3 ?GRAPH)
         (graphPart ?ARC1 ?GRAPH)
         (graphPart ?ARC2 ?GRAPH)
         (links ?ARC1 ?NODE1 ?NODE2)
         (links ?ARC2 ?NODE2 ?NODE3)
         (not (equal ?NODE1 ?NODE2))
         (not (equal ?NODE2 ?NODE3))
      (not (equal ?NODE1 ?NODE3))
         (not (equal ?ARC1 ?ARC2)))))

(subclass DirectedGraph Graph)
(documentation DirectedGraph "The &%Class of directed graphs.  A
directed graph is a &%Graph in which all &%GraphArcs
have direction, i.e. every &%GraphArc has an initial node (see
&%InitialNodeFn) and a terminal node (see &%TerminalNodeFn).")

(=>
   (and
      (instance ?GRAPH DirectedGraph)
      (instance ?ARC GraphArc)
      (graphPart ?ARC ?GRAPH))
   (exists (?NODE1 ?NODE2)
      (and
         (equal (InitialNodeFn ?ARC) ?NODE1)
         (equal (TerminalNodeFn ?ARC) ?NODE2))))

(subclass Tree Graph)
(documentation Tree "A Tree is a &%DirectedGraph that has no
&%GraphLoops.")

(=>
   (instance ?GRAPH Tree)
   (not (exists (?LOOP)
      (and
         (instance ?LOOP GraphLoop)
         (graphPart ?LOOP ?GRAPH)))))

(subclass GraphPath DirectedGraph)
(documentation GraphPath "Informally, a single, directed route between
two &%GraphNodes in a &%Graph.  Formally, a &%DirectedGraph that is a
&%subGraph of the original &%Graph and such that no two &%GraphArcs in
the &%DirectedGraph have the same intial node (see &%InitialNodeFn) or
the same terminal node (see &%TerminalNodeFn).")

(=>
   (and
      (instance ?GRAPH GraphPath)
      (instance ?ARC GraphArc)
      (graphPart ?ARC ?GRAPH))
   (=>
      (equal (InitialNodeFn ?ARC) ?NODE)
      (not (exists (?OTHER)
         (and
            (equal (InitialNodeFn ?OTHER) ?NODE)
            (not (equal ?OTHER ?ARC)))))))

(=>
   (and
      (instance ?GRAPH GraphPath)
      (instance ?ARC GraphArc)
      (graphPart ?ARC ?GRAPH))
   (=>
      (equal (TerminalNodeFn ?ARC) ?NODE)
      (not (exists (?OTHER)
         (and
            (equal (TerminalNodeFn ?OTHER) ?NODE)
            (not (equal ?OTHER ?ARC)))))))

(subclass GraphCircuit GraphPath)
(documentation GraphCircuit "A &%GraphPath that begins (see
&%BeginNodeFn) and ends (see &%EndNodeFn) at the same
&%GraphNode.")

(<=>
   (instance ?GRAPH GraphCircuit)
   (exists (?NODE)
      (and
         (equal (BeginNodeFn ?GRAPH) ?NODE)
         (equal (EndNodeFn ?GRAPH) ?NODE))))

(subclass MultiGraph Graph)
(documentation MultiGraph "The &%Class of multigraphs.  A multigraph
is a &%Graph containing at least one pair of &%GraphNodes that are
connected by more than one &%GraphArc.")

(<=>
   (instance ?GRAPH MultiGraph)
   (exists (?ARC1 ?ARC2 ?NODE1 ?NODE2)
      (and
         (graphPart ?ARC1 ?GRAPH)
         (graphPart ?ARC2 ?GRAPH)
         (graphPart ?NODE1 ?GRAPH)
         (graphPart ?NODE2 ?GRAPH)
         (links ?NODE1 ?NODE2 ?ARC1)
         (links ?NODE1 ?NODE2 ?ARC2)
         (not (equal ?ARC1 ?ARC2)))))

(subclass PseudoGraph Graph)
(documentation PseudoGraph "The &%Class of pseudographs.  A pseudograph
is a &%Graph containing at least one &%GraphLoop.")

(<=>
   (instance ?GRAPH PseudoGraph)
   (exists (?LOOP)
      (and
         (instance ?LOOP GraphLoop)
         (graphPart ?LOOP ?GRAPH))))

(subclass GraphElement Abstract)
(partition GraphElement GraphNode GraphArc)
(documentation GraphElement "Noncompositional parts of &%Graphs.
These parts are restricted to &%GraphNodes and &%GraphArcs.")

(=>
   (instance ?PART GraphElement)
   (exists (?GRAPH)
      (and
         (instance ?GRAPH Graph)
         (graphPart ?PART ?GRAPH))))

(subclass GraphNode GraphElement)
(documentation GraphNode "&%Graphs are comprised of &%GraphNodes
and &%GraphArcs.  Every &%GraphNode is linked by a &%GraphArc.")

(=>
   (instance ?NODE GraphNode)
   (exists (?OTHER ?ARC)
      (links ?NODE ?OTHER ?ARC)))

(subclass GraphArc GraphElement)
(documentation GraphArc "&%Graphs are comprised of &%GraphNodes
and &%GraphArcs.  Every &%GraphArc links two &%GraphNodes.")

(=>
   (instance ?ARC GraphArc)
   (exists (?NODE1 ?NODE2)
      (links ?NODE1 ?NODE2 ?ARC)))

(subclass GraphLoop GraphArc)
(documentation GraphLoop "A &%GraphArc in which a &%GraphNode is
linked to itself.")

(<=>
   (instance ?LOOP GraphLoop)
   (exists (?NODE)
      (links ?NODE ?NODE ?LOOP)))

(=>
   (and
      (equal (InitialNodeFn ?ARC) ?NODE)
      (equal (TerminalNodeFn ?ARC) ?NODE))
   (instance ?ARC GraphLoop))

(instance links TernaryPredicate)
(domain links 1 GraphNode)
(domain links 2 GraphNode)
(domain links 3 GraphArc)
(documentation links "a &%TernaryPredicate that specifies the
&%GraphArc connecting two &%GraphNodes.")

(=>
   (links ?NODE1 ?NODE2 ?ARC)
   (links ?NODE2 ?NODE1 ?ARC))

(instance graphPart BinaryPredicate)
(instance graphPart AsymmetricRelation)
(instance graphPart IrreflexiveRelation)
(domain graphPart 1 GraphElement)
(domain graphPart 2 Graph)
(documentation graphPart "A basic relation for &%Graphs and their
parts.  (&%graphPart ?PART ?GRAPH) means that ?PART is a &%GraphArc
or &%GraphNode of the &%Graph ?GRAPH.")

(instance subGraph BinaryPredicate)
(instance subGraph ReflexiveRelation)
(instance subGraph TransitiveRelation)
(domain subGraph 1 Graph)
(domain subGraph 2 Graph)
(documentation subGraph "The relation between two &%Graphs when one
&%Graph is a part of the other.  (&%subGraph ?GRAPH1 ?GRAPH2) means
that ?GRAPH1 is a part of ?GRAPH2.")

(=>
   (and
      (subGraph ?GRAPH1 ?GRAPH2)
      (graphPart ?ELEMENT ?GRAPH1))
   (graphPart ?ELEMENT ?GRAPH2))

(instance pathLength BinaryPredicate)
(instance pathLength AsymmetricRelation)
(instance pathLength IrreflexiveRelation)
(domain pathLength 1 GraphPath)
(domain pathLength 2 PositiveInteger)
(documentation pathLength "A &%BinaryPredicate that specifies the
length (in number of &%GraphNodes) of a &%GraphPath.
(&%pathLength ?PATH ?NUMBER) means that there are ?NUMBER nodes in
the &%GraphPath ?PATH.")

(instance InitialNodeFn UnaryFunction)
(instance InitialNodeFn PartialValuedRelation)
(domain InitialNodeFn 1 GraphArc)
(range InitialNodeFn GraphNode)
(documentation InitialNodeFn "A &%UnaryFunction that maps a
&%GraphArc to the initial node of the &%GraphArc.  Note
that this is a partial function.  In particular, the function is
undefined for &%GraphArcs that are not part of a &%DirectedGraph.")

(instance TerminalNodeFn UnaryFunction)
(instance TerminalNodeFn PartialValuedRelation)
(domain TerminalNodeFn 1 GraphArc)
(range TerminalNodeFn GraphNode)
(documentation TerminalNodeFn "A &%UnaryFunction that maps a
&%GraphArc to the terminal node of the &%GraphArc.  Note that this
is a partial function.  In particular, the function is undefined
for &%GraphArcs that are not part of a &%DirectedGraph.")

(instance BeginNodeFn UnaryFunction)
(instance BeginNodeFn TotalValuedRelation)
(domain BeginNodeFn 1 GraphPath)
(range BeginNodeFn GraphNode)
(relatedInternalConcept BeginNodeFn InitialNodeFn)
(documentation BeginNodeFn "A &%UnaryFunction that maps a &%GraphPath
to the &%GraphNode that is the beginning of the &%GraphPath.  Note that,
unlike &%InitialNodeFn (which relates a &%GraphArc to a &%GraphNode),
&%BeginNodeFn is a total function - every &%GraphPath has a beginning.")

(instance EndNodeFn UnaryFunction)
(instance EndNodeFn TotalValuedRelation)
(domain EndNodeFn 1 GraphPath)
(range EndNodeFn GraphNode)
(relatedInternalConcept EndNodeFn TerminalNodeFn)
(documentation EndNodeFn "A &%UnaryFunction that maps a &%GraphPath
to the &%GraphNode that is the end of the &%GraphPath.  Note that, unlike
&%TerminalNodeFn (which relates a &%GraphArc to a &%GraphNode),
&%EndNodeFn is a total function - every &%GraphPath has a end.")

(instance arcWeight BinaryPredicate)
(instance arcWeight SingleValuedRelation)
(domain arcWeight 1 GraphArc)
(domain arcWeight 2 RealNumber)
(documentation arcWeight "This predicate indicates the value of a
&%GraphArc in a &%Graph.  This could map to the length of a road in
a road network or the flow rate of a pipe in a plumbing system.")

(instance PathWeightFn UnaryFunction)
(domain PathWeightFn 1 GraphPath)
(range PathWeightFn RealNumber)
(documentation PathWeightFn "A &%UnaryFunction that maps a
&%GraphPath to the sum of the &%arcWeights on the &%GraphArcs in
the &%GraphPath.")

(=>
   (and
      (equal (PathWeightFn ?PATH) ?SUM)
      (subGraph ?SUBPATH ?PATH)
      (graphPart ?ARC1 ?PATH)
      (arcWeight ?ARC1 ?NUMBER1)
      (forall (?ARC2)
         (=>
            (graphPart ?ARC2 ?PATH)
            (or
               (graphPart ?ARC2 ?SUBPATH)
               (equal ?ARC2 ?ARC1)))))
   (equal ?SUM (AdditionFn (PathWeightFn ?SUBPATH) ?NUMBER1)))

(=>
   (and
      (equal (PathWeightFn ?PATH) ?SUM)
      (graphPart ?ARC1 ?PATH)
      (graphPart ?ARC2 ?PATH)
      (arcWeight ?ARC1 ?NUMBER1)
      (arcWeight ?ARC2 ?NUMBER2)
      (forall (?ARC3)
         (=>
            (graphPart ?ARC3 ?PATH)
            (or
               (equal ?ARC3 ?ARC1)
               (equal ?ARC3 ?ARC2)))))
   (equal (PathWeightFn ?PATH) (AdditionFn ?NUMBER1 ?NUMBER2)))

(instance MinimalWeightedPathFn BinaryFunction)
(domain MinimalWeightedPathFn 1 GraphNode)
(domain MinimalWeightedPathFn 2 GraphNode)
(range MinimalWeightedPathFn GraphPath)
(documentation MinimalWeightedPathFn "This &%BinaryFunction assigns two
&%GraphNodes to the &%GraphPath with the smallest sum of weighted arcs
between the two &%GraphNodes.")

(=>
   (equal (MinimalWeightedPathFn ?NODE1 ?NODE2) ?PATH)
   (instance ?PATH (GraphPathFn ?NODE1 ?NODE2)))

(=>
   (and
      (equal (MinimalWeightedPathFn ?NODE1 ?NODE2) ?PATH)
      (equal (PathWeightFn ?PATH) ?NUMBER))
   (forall (?PATH2)
      (=>
         (and
            (instance ?PATH2 (GraphPathFn ?NODE1 ?NODE2))
            (equal (PathWeightFn ?PATH2) ?NUMBER2))
         (greaterThanOrEqualTo ?NUMBER2 ?NUMBER1))))

(instance MaximalWeightedPathFn BinaryFunction)
(domain MaximalWeightedPathFn 1 GraphNode)
(domain MaximalWeightedPathFn 2 GraphNode)
(range MaximalWeightedPathFn GraphPath)
(documentation MaximalWeightedPathFn "This &%BinaryFunction assigns two
&%GraphNodes to the &%GraphPath with the largest sum of weighted arcs
between the two &%GraphNodes.")

(=>
   (equal (MaximalWeightedPathFn ?NODE1 ?NODE2) ?PATH)
   (instance ?PATH (GraphPathFn ?NODE1 ?NODE2)))

(=>
   (and
      (equal (MaximalWeightedPathFn ?NODE1 ?NODE2) ?PATH)
      (equal (PathWeightFn ?PATH) ?NUMBER))
   (forall (?PATH2)
      (=>
         (and
            (instance ?PATH2 (GraphPathFn ?NODE1 ?NODE2))
            (equal (PathWeightFn ?PATH2) ?NUMBER2))
         (lessThanOrEqualTo ?NUMBER2 ?NUMBER1))))

(instance GraphPathFn BinaryFunction)
(instance GraphPathFn TotalValuedRelation)
(domain GraphPathFn 1 GraphNode)
(domain GraphPathFn 2 GraphNode)
(rangeSubclass GraphPathFn GraphPath)
(documentation GraphPathFn "A &%BinaryFunction that maps two &%GraphNodes
to the &%Class of &%GraphPaths between those two nodes.  Note that the two
&%GraphNodes must belong to the same &%Graph.")

(=>
   (and
      (graphPart ?PATH ?GRAPH)
      (not (instance ?GRAPH DirectedGraph)))
   (<=>
      (equal (GraphPathFn ?NODE1 ?NODE2) ?PATH)
      (equal (GraphPathFn ?NODE2 ?NODE1) ?PATH)))

(instance CutSetFn UnaryFunction)
(domain CutSetFn 1 Graph)
(rangeSubclass CutSetFn GraphPath)
(documentation CutSetFn "A &%UnaryFunction that assigns a &%Graph the
&%Class of &%GraphPaths that partition the graph into two separate
graphs if cut.  There may be more than one cutset for a given graph.")

(instance MinimalCutSetFn UnaryFunction)
(domain MinimalCutSetFn 1 Graph)
(rangeSubclass MinimalCutSetFn GraphPath)
(relatedInternalConcept MinimalCutSetFn CutSetFn)
(documentation MinimalCutSetFn "A &%UnaryFunction that assigns a &%Graph
the &%Class of &%GraphPaths which comprise cutsets for the &%Graph and
which have the least number of &%GraphArcs.")

(=>
   (instance ?GRAPH Graph)
   (subclass (MinimalCutSetFn ?GRAPH) (CutSetFn ?GRAPH)))

(=>
   (equal (MinimalCutSetFn ?GRAPH) ?PATHCLASS)
   (exists (?NUMBER)
      (forall (?PATH)
         (=>
            (instance ?PATH ?PATHCLASS)
            (pathLength ?PATH ?NUMBER)))))

(not (exists (?PATH1 ?PATH2)
   (and
      (instance ?PATH1 (CutSetFn ?GRAPH))
      (instance ?PATH2 (MinimalCutSetFn ?GRAPH))
      (pathLength ?PATH1 ?NUMBER1)
      (pathLength ?PATH2 ?NUMBER2)
      (lessThan ?NUMBER1 ?NUMBER2))))

;; END FILE

;; <module>UNITS_OF_MEASURE</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;;;;;;;
;;  UNITS OF MEASURE   ;;
;;;;;;;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'NUMERIC FUNCTIONS'

;; This section was originally based on the relations in the Quantities
;; ontology (developed by ITBM-CNR) and the units of measure in the
;; "Standard Units" and "Standard Dimensions" ontologies on the Ontolingua
;; server.  This content has been extensively revised by Helena Sofia Pinto
;; of the Instituto Superior Tecnico in Portugal.  The sources for these
;; revisions were:
;; - Barry Taylor, NIST Special Publication 811, Guide for the Use of the
;;   International System of Units (SI), 1995.
;; - Encyclopaedia Britannica (on-line version at http://www.britannica.com)

(subclass UnitOfMeasure PhysicalQuantity)
(documentation UnitOfMeasure "A standard of measurement for some dimension.
For example, the &%Meter is a &%UnitOfMeasure for the dimension of length,
as is the &%Inch.  There is no intrinsic property of a &%UnitOfMeasure that
makes it primitive or fundamental; rather, a system of units (e.g.
&%SystemeInternationalUnit) defines a set of orthogonal dimensions and
assigns units for each.")

(subclass SystemeInternationalUnit UnitOfMeasure)
(documentation SystemeInternationalUnit "The &%Class of Systeme
International (SI) units.")

(subclass LengthMeasure ConstantQuantity)
(documentation LengthMeasure "The &%Class of &%ConstantQuantities relating
to length.")

(subclass MassMeasure ConstantQuantity)
(documentation MassMeasure "The &%Class of &%ConstantQuantities relating
to the amount of matter in an &%Object.")

(subclass AreaMeasure ConstantQuantity)
(documentation AreaMeasure "Measures of the amount of space in two
dimensions.")

(subclass VolumeMeasure ConstantQuantity)
(documentation VolumeMeasure "Measures of the amount of space in three
dimensions.")

(subclass TemperatureMeasure ConstantQuantity)
(documentation TemperatureMeasure "Measures of temperature.
In scientific circles, the temperature of something is understood as the
average velocity of the atoms or molecules that make up the thing.")

(subclass CurrencyMeasure ConstantQuantity)
(documentation CurrencyMeasure "Includes all standard measures of monetary
value, including &%UnitedStatesDollar, &%UnitedStatesCent, Lire, Yen, etc.")

(subclass AngleMeasure ConstantQuantity)
(documentation AngleMeasure "The value of an angle in a plane or in a
solid.")

(subclass PlaneAngleMeasure AngleMeasure)
(documentation PlaneAngleMeasure "The value of an angle in a plane.")

(subclass SolidAngleMeasure AngleMeasure)
(disjoint SolidAngleMeasure PlaneAngleMeasure)
(documentation SolidAngleMeasure "The value of an angle in a solid.")

(instance MeasureFn BinaryFunction)
(instance MeasureFn TotalValuedRelation)
(domain MeasureFn 1 RealNumber)
(domain MeasureFn 2 UnitOfMeasure)
(range MeasureFn ConstantQuantity)
(documentation MeasureFn "This &%BinaryFunction maps a &%RealNumber and
a &%UnitOfMeasure to that &%Number of units.  It is used for expressing
&%ConstantQuantities.  For example, the concept of three meters is
represented as (&%MeasureFn 3 &%Meter).")

(=>
   (and
      (equal (MeasureFn ?NUMBER ?UNIT) ?QUANT)
      (subclass ?UNIT ?QUANTTYPE))
   (instance ?QUANT ?QUANTTYPE))

(=>
   (and
      (instance ?REL RelationExtendedToQuantities)
      (instance ?REL TernaryRelation)
      (instance ?NUMBER1 RealNumber)
      (instance ?NUMBER2 RealNumber)
      (holds ?REL ?NUMBER1 ?NUMBER2 ?VALUE))
   (forall (?UNIT)
      (=>
         (instance ?UNIT UnitOfMeasure)
         (holds ?REL (MeasureFn ?NUMBER1 ?UNIT) (MeasureFn ?NUMBER2 ?UNIT) (MeasureFn ?VALUE ?UNIT)))))

(=>
   (and
      (instance ?REL RelationExtendedToQuantities)
      (instance ?REL BinaryRelation)
      (instance ?NUMBER1 RealNumber)
      (instance ?NUMBER2 RealNumber)
      (holds ?REL ?NUMBER1 ?NUMBER2))
   (forall (?UNIT)
      (=>
         (instance ?UNIT UnitOfMeasure)
         (holds ?REL (MeasureFn ?NUMBER1 ?UNIT) (MeasureFn ?NUMBER2 ?UNIT)))))

(instance KiloFn UnaryFunction)
(instance KiloFn TotalValuedRelation)
(domain KiloFn 1 UnitOfMeasure)
(range KiloFn UnitOfMeasure)
(documentation KiloFn "A &%UnaryFunction that maps a &%UnitOfMeasure into
a &%UnitOfMeasure that is equal to 1,000 units of the original &%UnitOfMeasure.
For example, (&%KiloFn &%Gram) is 1,000 &%Grams.")

(=>
   (instance ?UNIT UnitOfMeasure)
   (equal (KiloFn ?UNIT) (MeasureFn 1000 ?UNIT)))

(instance MegaFn UnaryFunction)
(instance MegaFn TotalValuedRelation)
(domain MegaFn 1 UnitOfMeasure)
(range MegaFn UnitOfMeasure)
(documentation MegaFn "A &%UnaryFunction that maps a &%UnitOfMeasure into
a &%UnitOfMeasure that is equal to 1,000,000 units of the original
&%UnitOfMeasure.  For example, (&%MegaFn &%Hertz) is 1,000,000 &%Hertz.")

(=>
   (instance ?UNIT UnitOfMeasure)
   (equal (MegaFn ?UNIT) (MeasureFn 1000000 ?UNIT)))

(instance GigaFn UnaryFunction)
(instance GigaFn TotalValuedRelation)
(domain GigaFn 1 UnitOfMeasure)
(range GigaFn UnitOfMeasure)
(documentation GigaFn "A &%UnaryFunction that maps a &%UnitOfMeasure into
a &%UnitOfMeasure that is equal to 1,000,000,000 units of the original
&%UnitOfMeasure.  For example, (&%GigaFn &%Hertz) is 1,000,000,000 &%Hertz.")

(=>
   (instance ?UNIT UnitOfMeasure)
   (equal (GigaFn ?UNIT) (MeasureFn 1000000000 ?UNIT)))

(instance TeraFn UnaryFunction)
(instance TeraFn TotalValuedRelation)
(domain TeraFn 1 UnitOfMeasure)
(range TeraFn UnitOfMeasure)
(documentation TeraFn "A &%UnaryFunction that maps a &%UnitOfMeasure
into a &%UnitOfMeasure that is equal to 1,000,000,000,000 units of the original
&%UnitOfMeasure.  For example, (&%TeraFn &%Hertz) is 1,000,000,000,000 &%Hertz.")

(=>
   (instance ?UNIT UnitOfMeasure)
   (equal (TeraFn ?UNIT) (MeasureFn 1000000000000 ?UNIT)))

(instance MilliFn UnaryFunction)
(instance MilliFn TotalValuedRelation)
(domain MilliFn 1 UnitOfMeasure)
(range MilliFn UnitOfMeasure)
(documentation MilliFn "A &%UnaryFunction that maps a &%UnitOfMeasure into
a &%UnitOfMeasure that is equal to .001 units of the original &%UnitOfMeasure.
For example, (&%MilliFn &%Ampere) is .001 &%Amperes.")

(=>
   (instance ?UNIT UnitOfMeasure)
   (equal (MilliFn ?UNIT) (MeasureFn 0.001 ?UNIT)))

(instance MicroFn UnaryFunction)
(instance MicroFn TotalValuedRelation)
(domain MicroFn 1 UnitOfMeasure)
(range MicroFn UnitOfMeasure)
(documentation MicroFn "A &%UnaryFunction that maps a &%UnitOfMeasure into
a &%UnitOfMeasure that is equal to .000001 units of the original &%UnitOfMeasure.
For example, (&%MicroFn &%Meter) is .000001 &%Meters.")

(=>
   (instance ?UNIT UnitOfMeasure)
   (equal (MicroFn ?UNIT) (MeasureFn 0.000001 ?UNIT)))

(instance NanoFn UnaryFunction)
(instance NanoFn TotalValuedRelation)
(domain NanoFn 1 UnitOfMeasure)
(range NanoFn UnitOfMeasure)
(documentation NanoFn "A &%UnaryFunction that maps a &%UnitOfMeasure into
a &%UnitOfMeasure that is equal to .000000001 units of the original
&%UnitOfMeasure.  For example, (&%MicroFn &%SecondDuration) is .000000001
&%SecondDurations.")

(=>
   (instance ?UNIT UnitOfMeasure)
   (equal (NanoFn ?UNIT) (MeasureFn 0.000000001 ?UNIT)))

(instance PicoFn UnaryFunction)
(instance PicoFn TotalValuedRelation)
(domain PicoFn 1 UnitOfMeasure)
(range PicoFn UnitOfMeasure)
(documentation PicoFn "A &%UnaryFunction that maps a &%UnitOfMeasure into
a &%UnitOfMeasure that is equal to .000000000001 units of the original
&%UnitOfMeasure.  For example, (&%PicoFn &%Ampere) is .000000000001
&%Amperes.")

(=>
   (instance ?UNIT UnitOfMeasure)
   (equal (PicoFn ?UNIT) (MeasureFn 0.000000000001 ?UNIT)))

(instance IntervalFn BinaryFunction)
(domain IntervalFn 1 ConstantQuantity)
(domain IntervalFn 2 ConstantQuantity)
(rangeSubclass IntervalFn ConstantQuantity)
(relatedInternalConcept IntervalFn RecurrentTimeIntervalFn)
(documentation IntervalFn "A &%BinaryFunction that maps two &%ConstantQuantities
to the &%Class of &%ConstantQuantities that comprise the interval from the first
&%ConstantQuantity to the second &%ConstantQuantity.  For example, (&%IntervalFn
(&%MeasureFn 8 &%Meter) (&%MeasureFn 14 &%Meter)) would return the &%Class of
&%ConstantQuantities between 8 and 14 meters in length.")

(<=>
   (instance ?QUANTITY (IntervalFn ?FROM ?TO))
   (and
        (greaterThanOrEqualTo ?QUANTITY ?FROM)
        (lessThanOrEqualTo ?QUANTITY ?TO)))

(instance MagnitudeFn UnaryFunction)
(domain MagnitudeFn  1 ConstantQuantity)
(range MagnitudeFn RealNumber)
(documentation MagnitudeFn "The magnitude of a &%ConstantQuantity is the
numeric value for the quantity.  In other words, &%MagnitudeFn converts
a &%ConstantQuantity with an associated &%UnitOfMeasure into an ordinary
&%RealNumber.  For example, the magnitude of the &%ConstantQuantity 2
&%Kilometers is the &%RealNumber 2.   Note that the magnitude of a
quantity in a given unit times that unit is equal to the original
quantity.")

(=>
   (and
      (instance ?NUMBER RealNumber)
      (instance ?UNIT UnitOfMeasure))
(equal (MagnitudeFn (MeasureFn ?NUMBER ?UNIT)) ?NUMBER))

(instance PerFn BinaryFunction)
(instance PerFn TotalValuedRelation)
(domain PerFn 1 ConstantQuantity)
(domain PerFn 2 ConstantQuantity)
(range PerFn FunctionQuantity)
(documentation PerFn "&%PerFn maps two instances of &%ConstantQuantity to the &%FunctionQuantity composed of these two instances.  For example, (&%PerFn (&%MeasureFn 2 (&%MicroFn &%Gram)) (&%MeasureFn 1 (&%KiloFn &%Gram))) denotes the &%FunctionQuantity of
2 micrograms per kiogram.  This function is useful, because it allows the knowledge
engineer to dynamically generate instances of &%FunctionQuantity.")

(subrelation DensityFn PerFn)
(instance DensityFn TotalValuedRelation)
(domain DensityFn 1 MassMeasure)
(domain DensityFn 2 VolumeMeasure)
(range DensityFn FunctionQuantity)
(documentation DensityFn "&%DensityFn maps an instance of &%MassMeasure
and an instance of &%VolumeMeasure to the density represented by this
proportion of mass and volume.  For example, (&%DensityFn (&%MeasureFn 3 &%Gram)
(&%MeasureFn 1 &%Liter)) represents the density of 3 grams per liter.")

(subrelation SpeedFn PerFn)
(instance SpeedFn TotalValuedRelation)
(domain SpeedFn 1 LengthMeasure)
(domain SpeedFn 2 TimeDuration)
(range SpeedFn FunctionQuantity)
(documentation SpeedFn "Maps an instance of &%LengthMeasure and an instance of
&%TimeDuration to the speed represented by this proportion of distance and time.
For example, (&%SpeedFn (&%MeasureFn 55 &%Mile)(&%MeasureFn 1 &%HourDuration))
represents the velocity of 55 miles per hour.")

(instance VelocityFn QuaternaryFunction)
(instance VelocityFn TotalValuedRelation)
(domain VelocityFn 1 LengthMeasure)
(domain VelocityFn 2 TimeDuration)
(domain VelocityFn 3 Region)
(domain VelocityFn 4 DirectionalAttribute)
(range VelocityFn FunctionQuantity)
(documentation VelocityFn "Specifies the velocity of an object, i.e. the speed
and the direction of the speed.  For example (&%VelocityFn (&%MeasureFn 55 &%Mile)
(&%MeasureFn 2 &%HourDuration) ?REFERENCE &%North) denotes the velocity of 55 miles
per hour North of the given reference point ?REFERENCE.")

(=>
   (measure ?OBJECT (VelocityFn ?DISTANCE ?TIME ?REF ?DIRECTION))
   (measure ?OBJECT (SpeedFn ?DISTANCE ?TIME)))

;; Now the units of measure:

;; First base units for the SI system. No conversion functions are
;; provided for these units.

;; Length Base Unit

(subclass Meter LengthMeasure)
(instance Meter SystemeInternationalUnit)
(documentation Meter "SI &%LengthMeasure.  Symbol:  m. It is one of the
base units in SI, and it is currently defined as follows: the &%Meter
is the length of the path traveled by light in a vacuum during a time
interval of 1/299792458 of a &%SecondDuration.")

;; Mass Base Unit

(subclass Gram MassMeasure)
(instance Gram SystemeInternationalUnit)
(documentation Gram "Submultiple of kilogram.  Symbol: g.
1 kilogram = 1000 &%Grams.")

;; Time Base Unit

(subclass SecondDuration TimeDuration)
(instance SecondDuration SystemeInternationalUnit)
(documentation SecondDuration "SI &%TimeDuration.  Symbol: s.
It is one of the base units in SI, and it is currently defined as
follows: the &%SecondDuration is the duration of 9192631770 periods of
the radiation corresponding to the transition between the two hyperfine
levels of the ground state of the cesium 133 atom.")

;; Electric Current Base Unit

(subclass Ampere FunctionQuantity)
(instance Ampere SystemeInternationalUnit)
(documentation Ampere "SI electric current measure.  Symbol: A. It is
one of the base units in SI. It is defined as follows: the &%Ampere is
that constant current which, if maintained in two straight parallel
conductors of infinite length, of negligible circular cross-section, and
placed 1 &%Meter apart in a vacuum, would produce between these conductors
a force equal to 2*10^(-7) &%Newton per &%Meter of length.")

;; Thermodynamic Temperature Base Unit

(subclass KelvinDegree TemperatureMeasure)
(instance KelvinDegree SystemeInternationalUnit)
(documentation KelvinDegree "SI &%TemperatureMeasure.  Symbol: K.
It is one of the base units in SI (it is also a unit in the ITS system).
Kelvin differs from the Celsius scale in that the triple point of water
is defined to be 273.16 &%KelvinDegrees while it is 0 &%CelsiusDegrees.
The magnitudes of intervals in the two scales are the same.  By definition
the conversion constant is 273.15.")

;; Amount Of Substance Base Unit

(subclass Mole MassMeasure)
(instance Mole SystemeInternationalUnit)
(documentation Mole "SI amount of substance unit. symbol: mol. It is one
of the base units in SI. It is defined as follows:  the &%Mole is the
amount of substance of a system which contains as many elementary entities
as there are atoms in 0.012 &%Kilograms of carbon 12.  Note that, when this
&%UnitOfMeasure is used, the elementary entities must be specified - they
may be atoms, molecules, ions, electrons, etc. or groups of such
particles.")

;; Luminosity Intensity Base Unit

(subclass Candela FunctionQuantity)
(instance Candela SystemeInternationalUnit)
(documentation Candela "SI luminosity intensity measure.  Symbol: cd.
It is one of the base units in SI, and it is currently defined as
follows:  the &%Candela is the luminous intensity, in a given direction,
of a source that emits monochromatic radiation of frequency 540*10^12
&%Hertz and that has a radiant intensity in that direction of 1/683
&%Watt per &%Steradian.")

(subclass Liter VolumeMeasure)
(instance Liter UnitOfMeasure)
(documentation Liter "Unit of volume in the metric system.  It is currently
defined to be equal to one cubic decimeter (0.001 cubic meter).  Symbol: l.")

(subclass Centimeter LengthMeasure)
(instance Centimeter UnitOfMeasure)
(documentation Centimeter "Submultiple of &%Meter.  Symbol: cm. It is
the 100th part of a &%Meter")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Centimeter)
        (MeasureFn (MultiplicationFn ?NUMBER 0.01) Meter)))

;; What follows are derived SI units with special names and symbols
;; (multiples and submultiples are together since they represent
;; quantities of the same kind).

;; Plane angle unit

(subclass Radian PlaneAngleMeasure)
(instance Radian SystemeInternationalUnit)
(documentation Radian "SI plane angle measure.  Symbol: rad.  It is the
angle of a circle subtended by an arc equal in length to the circle's
radius. Another definition is:  the plane angle between two radii of a
circle which cut off on the circumference an arc equal in length to the
radius.  &%Radian = m/m = 1.")

;; Solid angle unit

(subclass Steradian SolidAngleMeasure)
(instance Steradian SystemeInternationalUnit)
(documentation Steradian "SI solid angle measure.  Symbol: sr.  It is
the solid angle of a sphere subtended by a portion of the surface whose
area is equal to the square of the sphere's radius.  Another definition
is: the solid angle which, having its vertex in the center of the sphere,
cuts off an area of the surface of the sphere equal to that of a square
with sides of length equal to the radius of the sphere.  &%Steradian =
m^2/m^2 = 1.")

;; Frequency units

(subclass Hertz TimeDependentQuantity)
(instance Hertz SystemeInternationalUnit)
(documentation Hertz "SI frequency measure.  Symbol: Hz. It is the
number of cycles per second.  &%Hertz = s^(-1).  Note that &%Hertz
does not have a conversion function.")

; Force Unit

(subclass Newton FunctionQuantity)
(instance Newton SystemeInternationalUnit)
(documentation Newton "SI force measure.  Symbol: N. It is that force
which gives to a mass of 1 kilogram an acceleration of 1 &%Meter per
&%SecondDuration.  &%Newton = m*kg*s^(-2).")

; Pressure unit

(subclass Pascal FunctionQuantity)
(instance Pascal SystemeInternationalUnit)
(documentation Pascal "SI pressure measure.  Symbol:Pa. It is the
pressure of one &%Newton per square &%Meter.  &%Pascal = N/m^2
= m^(-1)*kg*s^(-2).")

; Energy Unit

(subclass Joule FunctionQuantity)
(instance Joule SystemeInternationalUnit)
(documentation Joule "SI energy measure.  Symbol: J.  It is the work
done when the point of application of 1 &%Newton is displaced a distance
of 1 &%Meter in the direction of the force.  &%Joule = N*m =
m^2*kg*s^(-2).")

; Power Units

(subclass Watt FunctionQuantity)
(instance Watt SystemeInternationalUnit)
(documentation Watt "SI power measure.  Symbol: W.  A &%UnitOfMeasure
that measures power, i.e. energy produced or expended divided by
&%TimeDuration. It is the power which gives rise to the production
of energy (or work) at the rate of one &%Joule per &%SecondDuration.
&%Watt = J/s = m^2*kg*s^(-3).")

;;; Note: According to SI one should not use the expression "per unit of."

; Electric Charge Units

(subclass Coulomb TimeDependentQuantity)
(instance Coulomb SystemeInternationalUnit)
(documentation Coulomb "SI electric charge measure.  Symbol: C. It is
the quantity of electric charge transported through a cross section of
a conductor in an electric circuit during each &%SecondDuration by a
current of 1 &%Ampere.  Coulomb = s*A.")

; Electric Potential Units

(subclass Volt FunctionQuantity)
(instance Volt SystemeInternationalUnit)
(documentation Volt "SI electric potential measure.  Symbol: V.  It is
the difference of electric potential between two points of a conducting
wire carrying a constant current of 1 &%Ampere, when the power dissipated
between these points is equal to 1 &%Watt.  &%Volt = W/A =
m^2*kg*s^(-3)*A^(-1).")

; Capacitance Units

(subclass Farad FunctionQuantity)
(instance  Farad SystemeInternationalUnit)
(documentation Farad "SI capacitance measure.  Symbol: F.  It is the
capacitance of a capacitator between the plates of which there appears
a difference of potential of 1 &%Volt when it is charged by a quantity
of electricity equal to 1 Coulomb.  &%Farad = C/V =
m^(-2)*kg(-1)*s^4*A^2.")

;Electric Resistance Units

(subclass Ohm FunctionQuantity)
(instance Ohm SystemeInternationalUnit)
(documentation Ohm "SI electric resistance measure. It is the electric
resistance between two points of a conductor when a constant difference
of potential of 1 &%Volt, applied between these two points,
produces in this conductor a current of 1 &%Ampere, this conductor not
being the force of any electromotive force.  &%Ohm = V/A =
m^2*kg*s^(-3)*A^(-2).")

; Electric Conductance Units

(subclass Siemens FunctionQuantity)
(instance Siemens SystemeInternationalUnit)
(documentation Siemens "SI electric conductance measure.  Symbol:  S.
In the case of direct current, the conductance in &%Siemens is the
reciprocal of the resistance in &%Ohms; in the case of alternating current,
it is the reciprocal of the impedance in ohms.  siemens = A/V =
m^(-2)*kg(-1)*s^(3)*A^2.")

; Magnetic Flux Units

(subclass Weber FunctionQuantity)
(instance  Weber SystemeInternationalUnit)
(documentation Weber "SI magnetic flux measure.  Symbol: Wb. It is the
magnetic flux which, linking a circuit of one turn, produces in it an
electromotive force of 1 &%Volt as it is reduced to zero at a uniform
rate in 1 &%SecondDuration.  &%Weber = V*s = m^2*kg*s^(-2)*A^(-1)." )

; Magnetic Flux Density Units

(subclass Tesla FunctionQuantity)
(instance Tesla SystemeInternationalUnit)
(documentation Tesla "SI magnetic flux density measure.  Symbol:  T.
One &%Tesla equals one &%Weber per square &%Meter.  &%Tesla = Wb/m^2 =
kg*s^(-2)*A^(-1).")

; Inductance Units

(subclass Henry FunctionQuantity)
(instance Henry SystemeInternationalUnit)
(documentation Henry "SI inductance measure.  Symbol: H.  One &%Henry
is equivalent to one &%Volt divided by one &%Ampere per &%SecondDuration.
If a current changing at the rate of one &%Ampere per &%SecondDuration
induces an electromotive force of one &%Volt, the circuit has an
inductance of one &%Henry.  &%Henry = Wb/A = m^2*kg*s^(-2)*A^(-2).")

; Celsius Temperature unit

(subclass CelsiusDegree TemperatureMeasure)
(instance CelsiusDegree SystemeInternationalUnit)
(documentation CelsiusDegree "A &%TemperatureMeasure.  The freezing point
and the boiling point of water are, respectively, 0 &%CelsiusDegrees and 100 &%CelsiusDegrees.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
      (MeasureFn ?NUMBER CelsiusDegree)
      (MeasureFn (SubtractionFn ?NUMBER 273.15) KelvinDegree)))

(=>
   (instance ?NUMBER RealNumber)
   (equal
      (MeasureFn ?NUMBER CelsiusDegree)
      (MeasureFn (DivisionFn (SubtractionFn ?NUMBER 32) 1.8) FahrenheitDegree)))

; Luminous Flux Units

(subclass Lumen FunctionQuantity)
(instance Lumen SystemeInternationalUnit)
(documentation Lumen "SI luminous flux measure.  Symbol: lm.  It is the
amount streaming outward through one solid angle of 1 &%Steradian from a
uniform point source having an intensity of one &%Candela.  &%Lumen =
cd*sr = cd * 1.")

; Illuminance Units

(subclass Lux FunctionQuantity)
(instance Lux SystemeInternationalUnit)
(documentation Lux "SI illuminance measure.  Symbol: lx.  It is the
amount of illumination provided when one &%Lumen is evenly distributed
over an area of 1 square &%Meter. This is also equivalent to the
illumination that would exist on a surface all points of which are one
&%Meter from a point source of one &%Candela.  &%Lux = lm/m^2 =
m^(-2)*cd.")

; Activity Units

(subclass Becquerel TimeDependentQuantity)
(instance Becquerel SystemeInternationalUnit)
(documentation Becquerel "SI activity measure.  Symbol: Bq.  It measures
the amount of radioactivity contained in a given sample of matter. It is
that quantity of a radioactive element in which there is one atomic
disintegration per &%SecondDuration.  &%Becquerel = s^(-1).")

; Absorbed Dose Units

(subclass Gray FunctionQuantity)
(instance Gray SystemeInternationalUnit)
(documentation Gray "SI absorbed dose measure.  Symbol: Gy.  It measures
the dose of radiation absorbed in living tissue. It is equal approximately
to the absorbed dose delivered when the energy per unit mass imparted to
matter by ionizing radiation is 1 &%Joule per kilogram.  &%Gray = J/kg
= m^2*s^(-2).")

; Dose Equivalent Units

(subclass Sievert FunctionQuantity)
(instance Sievert SystemeInternationalUnit)
(documentation Sievert "SI dose equivalent measure.  Symbol: Sv.  It is
a unit of biologic dose of ionizing radiation.  The &%Sievert makes it
possible to normalize doses of different types of radiation. It takes
into account the relative biologic effectiveness of ionizing radiation,
since each form of such radiation--e.g., X rays, gamma rays, neutrons--
has a slightly different effect on living tissue for a given absorbed
dose. The dose equivalent of a given type of radiation (in &%Sievert) is
the dose of the radiation in &%Gray multiplied by a quality factor that
is based on the relative biologic effectiveness of the radiation.
Accordingly, one &%Sievert is generally defined as the amount of radiation
roughly equivalent in biologic effectiveness to one &%Gray of gamma
radiation.  &%Sievert = J/kg = m^2*s^(-2)")

; Units that are accepted for -use- with SI

(subclass DayDuration TimeDuration)
(instance DayDuration UnitOfMeasure)
(documentation DayDuration "Time unit. 1 day = 24 hours.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
   (MeasureFn ?NUMBER DayDuration)
   (MeasureFn (MultiplicationFn ?NUMBER 24) HourDuration)))

(subclass HourDuration TimeDuration)
(instance HourDuration UnitOfMeasure)
(documentation HourDuration "Time unit. 1 hour = 60 minutes.")

(=>
  (instance ?NUMBER RealNumber)
  (equal
     (MeasureFn ?NUMBER HourDuration)
     (MeasureFn (MultiplicationFn ?NUMBER 60) MinuteDuration)))

(subclass MinuteDuration TimeDuration)
(instance MinuteDuration UnitOfMeasure)
(documentation MinuteDuration "Time unit. 1 minute = 60 seconds. ")

(=>
   (instance ?NUMBER RealNumber)
   (equal
       (MeasureFn ?NUMBER MinuteDuration)
       (MeasureFn (MultiplicationFn ?NUMBER 60) SecondDuration)))

(subclass WeekDuration TimeDuration)
(instance WeekDuration UnitOfMeasure)
(documentation WeekDuration "Time unit.  A week's duration is seven days.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
      (MeasureFn ?NUMBER WeekDuration)
      (MeasureFn (MultiplicationFn ?NUMBER 7) DayDuration)))

(subclass YearDuration TimeDuration)
(instance YearDuration UnitOfMeasure)
(documentation YearDuration "Time unit. one calendar year. 1 year =
365 days = 31536000 seconds.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
     (MeasureFn ?NUMBER YearDuration)
     (MeasureFn (MultiplicationFn ?NUMBER 365) DayDuration)))

;; What follows are units that are also accepted for use with SI.  The
;; SI equivalents for these units are obtained experimentally.

(subclass Amu MassMeasure)
(instance Amu UnitOfMeasure)
(documentation Amu "Atomic mass unit.  Symbol: u. It is the mass of
the twelfth part of an atom of the Carbon 12 isotope.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Amu)
        (MeasureFn (MultiplicationFn ?NUMBER 1.6605402E-24) Gram)))

(subclass ElectronVolt FunctionQuantity)
(instance ElectronVolt UnitOfMeasure)
(documentation ElectronVolt "The &%ElectronVolt is an energy measure.
Symbol: eV.  It is the kinetic energy acquired by an electron in passing
through a potential difference of 1 &%Volt in a vacuum.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER ElectronVolt)
        (MeasureFn (MultiplicationFn ?NUMBER 1.60217733E-19) Joule)))

;; The following units have been temporarily accepted for use with
;; SI units.

(subclass Angstrom LengthMeasure)
(instance Angstrom UnitOfMeasure)
(documentation Angstrom "The &%Angstrom is a &%LengthMeasure.
1 &%Angstrom = 10^(-10) m")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Angstrom)
        (MeasureFn (MultiplicationFn ?NUMBER 1.0E-10) Meter)))

;; The following units are unacceptable in SI but are part of other
;; systems of measurement that are widely used.

;; More Length units

(subclass FootLength LengthMeasure)
(instance FootLength UnitOfMeasure)
(documentation FootLength "English length unit of feet.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER FootLength)
        (MeasureFn (MultiplicationFn ?NUMBER 0.3048) Meter)))

(subclass Inch LengthMeasure)
(instance Inch UnitOfMeasure)
(documentation Inch "English length unit of inches.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Inch)
        (MeasureFn (MultiplicationFn ?NUMBER 0.0254) Meter)))

(subclass Mile LengthMeasure)
(instance Mile UnitOfMeasure)
(documentation Mile "English length unit of miles.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Mile)
        (MeasureFn (MultiplicationFn ?NUMBER 1609.344) Meter)))

;; More Volume units

(subclass UnitedStatesGallon VolumeMeasure)
(instance UnitedStatesGallon UnitOfMeasure)
(relatedInternalConcept UnitedStatesGallon UnitedKingdomGallon)
(documentation UnitedStatesGallon "Unit of volume commonly used in the
United States.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER UnitedStatesGallon)
        (MeasureFn (MultiplicationFn ?NUMBER 3.785411784) Liter)))

(subclass Quart VolumeMeasure)
(instance Quart UnitOfMeasure)
(documentation Quart "English unit of volume equal to 1/4 of a
&%UnitedStatesGallon.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Quart)
        (MeasureFn (DivisionFn ?NUMBER 4) UnitedStatesGallon)))

(subclass Pint VolumeMeasure)
(instance Pint UnitOfMeasure)
(documentation Pint "English unit of volume equal to 1/2 of a
&%Quart.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Pint)
        (MeasureFn (DivisionFn ?NUMBER 2) Quart)))

(subclass CupMeasure VolumeMeasure)
(instance CupMeasure UnitOfMeasure)
(documentation CupMeasure "English unit of volume equal to 1/2 of a
&%Pint.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Cup)
        (MeasureFn (DivisionFn ?NUMBER 2) Pint)))

(subclass Ounce VolumeMeasure)
(instance Ounce UnitOfMeasure)
(documentation Ounce "English unit of volume equal to 1/8 of a
&%Cup.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Ounce)
        (MeasureFn (DivisionFn ?NUMBER 8) Cup)))

(subclass UnitedKingdomGallon VolumeMeasure)
(instance UnitedKingdomGallon UnitOfMeasure)
(documentation UnitedKingdomGallon "Unit of volume commonly used in the
United Kingdom.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER UnitedKingdomGallon)
        (MeasureFn (MultiplicationFn ?NUMBER 4.54609) Liter)))

;; More Mass units

(subclass AtomGram MassMeasure)
(instance AtomGram UnitOfMeasure)
(documentation AtomGram "&%MassMeasure that is also known as the gram-atom.
Defined as the mass in grams of 1 &%Mole of pure substance.  For example,
1 &%AtomGram of Carbon 12 will be 12 &%Grams of pure Carbon 12.  2 &%AtomGrams
of the same substance will be 24 &%Grams of it.  This is an unusual unit in
that it is essentially 1 &%Mole of 'stuff' measured in grams, so that the
actual value (i.e. mass) depends on the type of substance.")

(subclass PoundMass MassMeasure)
(instance PoundMass UnitOfMeasure)
(documentation PoundMass "English mass unit of pounds.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER PoundMass)
        (MeasureFn (MultiplicationFn ?NUMBER 453.59237) Gram)))

(subclass Slug MassMeasure)
(instance Slug UnitOfMeasure)
(documentation Slug "English mass unit of slugs.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Slug)
        (MeasureFn (MultiplicationFn ?NUMBER 14593.90) Gram)))

;; More Temperature units

(subclass RankineDegree TemperatureMeasure)
(instance RankineDegree UnitOfMeasure)
(documentation RankineDegree "A &%TemperatureMeasure.  Note
that 0 &%RankineDegrees is the same as the absolute zero (i.e. 0
&%KelvinDegrees).")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER RankineDegree)
        (MeasureFn (MultiplicationFn ?NUMBER 1.8) KelvinDegree)))

(subclass FahrenheitDegree TemperatureMeasure)
(instance FahrenheitDegree UnitOfMeasure)
(documentation FahrenheitDegree "A &%TemperatureMeasure that is commonly
used in the United States.  On the Fahrenheit scale, the freezing point
of water is 32 &%FahrenheitDegrees, and the boiling point of water is
212 &%FahrenheitDegrees.")

;; More Force units

(subclass PoundForce FunctionQuantity)
(instance PoundForce UnitOfMeasure)
(documentation PoundForce "English pound of force. The conversion
factor depends on the local value of the acceleration of free fall. A
mean value is used in the conversion axiom associated with this
constant.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER PoundForce)
        (MeasureFn (MultiplicationFn ?NUMBER 4.448222) Newton)))

;; More Energy units

(subclass Calorie FunctionQuantity)
(instance Calorie UnitOfMeasure)
(documentation Calorie "A &%Calorie is an energy measure.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Calorie)
        (MeasureFn (MultiplicationFn ?NUMBER 4.1868) Joule)))

(subclass BritishThermalUnit FunctionQuantity)
(instance BritishThermalUnit UnitOfMeasure)
(documentation BritishThermalUnit "An energy measure.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER BritishThermalUnit)
        (MeasureFn (MultiplicationFn ?NUMBER 1055.05585262) Joule)))

;; More plane angle units

(subclass AngularDegree PlaneAngleMeasure)
(instance AngularDegree UnitOfMeasure)
(documentation AngularDegree "A plane angle measure.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
     (MeasureFn ?NUMBER AngularDegree)
     (MeasureFn (MultiplicationFn ?NUMBER (DivisionFn Pi 180)) Radian)))

(=>
   (measure ?ANGLE (MeasureFn ?NUMBER AngularDegree))
   (and
      (greaterThanOrEqualTo ?NUMBER 0)
      (lessThanOrEqualTo ?NUMBER 360)))

(equal (MeasureFn 0 AngularDegree) (MeasureFn 360 AngularDegree))

; Other interesting units of measure

; Currency units

(subclass UnitedStatesDollar CurrencyMeasure)
(instance UnitedStatesDollar UnitOfMeasure)
(documentation UnitedStatesDollar "A currency measure.")

(subclass UnitedStatesCent CurrencyMeasure)
(instance UnitedStatesCent UnitOfMeasure)
(documentation UnitedStatesCent "A currency measure.  1 &%UnitedStatesCent is
equal to .01 &%UnitedStatesDollars.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER UnitedStatesCent)
        (MeasureFn (MultiplicationFn ?NUMBER 0.01) UnitedStatesDollar)))

(subclass EuroDollar CurrencyMeasure)
(instance EuroDollar UnitOfMeasure)
(documentation EuroDollar "A currency measure of most European Union countries.
It is based on the &%UnitedStatesDollar.")

(subclass EuroCent CurrencyMeasure)
(instance EuroCent UnitOfMeasure)
(documentation EuroCent "A currency measure.  1 &%EuroCent is equal to .01
&%EuroDollars.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER EuroCent)
        (MeasureFn (MultiplicationFn ?NUMBER 0.01) EuroDollar)))

; Information units

(subclass InformationMeasure ConstantQuantity)
(documentation InformationMeasure "Measures of the amount of information.
Includes &%Bit, &%Byte, and multiples of these, e.g. &%KiloByte and
&%MegaByte.")

(subclass Bit InformationMeasure)
(instance Bit UnitOfMeasure)
(documentation Bit "One &%Bit of information.  A one or a zero.")

(subclass Byte InformationMeasure)
(instance Byte UnitOfMeasure)
(documentation Byte "One &%Byte of information.  A &%Byte is eight
&%Bits.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER Byte)
        (MeasureFn (MultiplicationFn ?NUMBER 8) Bit)))

(subclass KiloByte InformationMeasure)
(instance KiloByte UnitOfMeasure)
(documentation KiloByte "One &%KiloByte (KB) of information.  One
&%KiloByte is 1024 &%Bytes.  Note that this sense of 'kilo' is
different from the one accepted in the SI system.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER KiloByte)
        (MeasureFn (MultiplicationFn ?NUMBER 1024) Byte)))

(subclass MegaByte InformationMeasure)
(instance MegaByte UnitOfMeasure)
(documentation MegaByte "One &%MegaByte (MB) of information.  One
&%MegaByte is 1024 &%KiloBytes.  Note that this sense of 'mega' is
different from the one accepted in the SI system.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER MegaByte)
        (MeasureFn (MultiplicationFn ?NUMBER 1024) KiloByte)))

;; The following content was inspired by the Quantities ontology
;; developed by ITBM-CNR.

(instance measure BinaryPredicate)
(instance measure AsymmetricRelation)
(domain measure 1 Object)
(domain measure 2 PhysicalQuantity)
(documentation measure "A very general &%Predicate for asserting that a
particular &%Object is measured by a particular &%ConstantQuantity.
In general, the second argument of this &%Predicate will be an instance
of the &%Function &%MeasureFn.")

(instance age SingleValuedRelation)
(subrelation age measure)
(domain age 2 TimeDuration)
(documentation age "Simply relates an &%Object to a &%ConstantQuantity
specifying the age of the &%Object.")

(subrelation length measure)
(domain length 2 LengthMeasure)
(documentation length "&%BinaryPredicate that is used to state the measure
of an &%Object from one point to another point along its surface.  Note
that the difference between the predicates &%length and &%distance is that
the &%length is used to state the &%LengthMeasure of one of the dimensions of
a single object, while &%distance is used to state the &%LengthMeasure that
separates two distinct objects")

(instance width SingleValuedRelation)
(subrelation width length)
(documentation width "&%BinaryPredicate that is used to state the measure
of an &%Object from side to side at its widest span.")

(instance distance SingleValuedRelation)
(instance distance SpatialRelation)
(instance distance TernaryPredicate)
(domain distance 1 Physical)
(domain distance 2 Physical)
(domain distance 3 LengthMeasure)
(documentation distance "(&%distance ?OBJ1 ?OBJ2 ?QUANT) means that the
shortest distance between the two objects ?OBJ1 and ?OBJ2 is ?QUANT.  Note
that the difference between the predicates &%length and &%distance is that
the &%length is used to state the &%LengthMeasure of one of the dimensions of
a single object, while &%distance is used to state the &%LengthMeasure that
separates two distinct objects.")

(=>
   (distance ?OBJ1 ?OBJ2 ?QUANT)
   (distance ?OBJ2 ?OBJ1 ?QUANT))

(subrelation altitude distance)
(instance altitude SingleValuedRelation)
(documentation altitude "A &%TernaryPredicate that is used to state the &%distance
between the &%top of an &%Object and another point that is below the &%top of the
&%Object (often this other point will be sea level).  Note that this &%Predicate can
be used to specify, for example, the height of geographic features, e.g. mountains,
the altitude of aircraft, and the orbit of satellites around the Earth.")

(=>
   (altitude ?OBJ1 ?OBJ2 ?HEIGHT)
   (orientation ?OBJ1 ?OBJ2 Above))

(=>
   (altitude ?OBJ1 ?OBJ2 ?HEIGHT)
   (exists (?TOP)
      (and
         (top ?TOP ?OBJ1)
         (distance ?TOP ?OBJ2 ?HEIGHT))))

(subrelation depth distance)
(instance depth SingleValuedRelation)
(documentation depth "A &%TernaryPredicate that is used to state the &%distance
between the &%top of an &%Object and another point that is above the &%top of the
&%Object (often this other point will be sea level).  Note that this &%Predicate can
be used to specify, for example, the depth of marine life or submarines, for example.")

(=>
   (depth ?OBJ1 ?OBJ2 ?DEPTH)
   (orientation ?OBJ1 ?OBJ2 Below))

(=>
   (depth ?OBJ1 ?OBJ2 ?DEPTH)
   (exists (?BOTTOM)
      (and
         (bottom ?BOTTOM ?OBJ1)
         (distance ?BOTTOM ?OBJ2 ?DEPTH))))

(instance larger BinaryPredicate)
(instance larger SpatialRelation)
(instance larger TransitiveRelation)
(instance larger IrreflexiveRelation)
(domain larger 1 Object)
(domain larger 2 Object)
(documentation larger "(&%larger ?OBJ1 ?OBJ2) simply means that ?OBJ1 is
larger, with respect to all &%LengthMeasures, than ?OBJ2.")

(=>
   (larger ?OBJ1 ?OBJ2)
   (forall (?QUANT1 ?QUANT2)
      (=>
         (and
            (measure ?OBJ1 (MeasureFn ?QUANT1 LengthMeasure))
            (measure ?OBJ2 (MeasureFn ?QUANT2 LengthMeasure)))
         (greaterThan ?QUANT1 ?QUANT2))))

(instance smaller BinaryPredicate)
(instance smaller SpatialRelation)
(instance smaller TransitiveRelation)
(instance smaller IrreflexiveRelation)
(domain smaller 1 Object)
(domain smaller 2 Object)
(inverse smaller larger)
(documentation smaller "(&%smaller ?OBJ1 ?OBJ2) simply means that ?OBJ1
is smaller, with respect to all &%LengthMeasures, than ?OBJ2.")

(instance monetaryValue SingleValuedRelation)
(subrelation monetaryValue measure)
(domain monetaryValue 1 Object)
(domain monetaryValue 2 CurrencyMeasure)
(documentation monetaryValue "A &%BinaryPredicate that associates an
&%Object with its value expressed as an instance of &%CurrencyMeasure.")

(instance WealthFn UnaryFunction)
(domain WealthFn 1 Agent)
(range WealthFn CurrencyMeasure)
(documentation WealthFn "A &%UnaryFunction that maps an &%Agent to a
&%CurrencyMeasure specifying the value of the property owned by the &%Agent.
Note that this &%Function is generally used in conjunction with the
&%Function &%PropertyFn, e.g. (&%WealthFn (&%PropertyFn BillGates)) would
return the monetary value of the sum of Bill Gates' holdings.")

(<=>
   (equal (WealthFn ?PERSON) ?AMOUNT)
   (monetaryValue (PropertyFn ?PERSON) ?AMOUNT))

;; END FILE

;; <module>TEMPORAL_CONCEPTS</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;;;;;
;; TEMPORAL CONCEPTS ;;
;;;;;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'STRUCTURAL ONTOLOGY'
;; INCLUDES 'BASE ONTOLOGY'

;; The first part of this section contains definitions relations involving
;; temporal notions.  Most of these definitions and axioms were derived from
;; James Allen's work.  This part of the section was extensively revised on
;; the basis of comments from Pat Hayes.  The second part of this section
;; is an attempt to incorporate the Simple-Time ontology from the
;; Ontolingua server into the SUMO.

(instance PositiveInfinity TimePoint)
(documentation PositiveInfinity "The &%TimePoint that is after
all other &%TimePoints.")

(=>
   (and
      (instance ?POINT TimePoint)
      (not (equal ?POINT PositiveInfinity)))
   (before ?POINT PositiveInfinity))

(=>
   (and
      (instance ?POINT TimePoint)
      (not (equal ?POINT PositiveInfinity)))
   (exists (?OTHERPOINT)
      (temporallyBetween ?POINT ?OTHERPOINT PositiveInfinity)))

(instance NegativeInfinity TimePoint)
(documentation NegativeInfinity "The &%TimePoint that is before
all other &%TimePoints.")

(=>
   (and
      (instance ?POINT TimePoint)
      (not (equal ?POINT NegativeInfinity)))
    (before NegativeInfinity ?POINT))

(=>
   (and
      (instance ?POINT TimePoint)
      (not (equal ?POINT NegativeInfinity)))
   (exists (?OTHERPOINT)
      (temporallyBetween NegativeInfinity ?OTHERPOINT ?POINT)))

(instance duration BinaryPredicate)
(instance duration AsymmetricRelation)
(instance duration TotalValuedRelation)
(domain duration 1 TimeInterval)
(domain duration 2 TimeDuration)
(documentation duration "(&%duration ?POS ?TIME) means that the
duration of the &%TimePosition ?POS is ?TIME.  Note that this
&%Predicate can be used in conjunction with the &%Function &%WhenFn
to specify the duration of any instance of &%Physical.")

(instance frequency BinaryPredicate)
(instance frequency AsymmetricRelation)
(domainSubclass frequency 1 Process)
(domain frequency 2 TimeDuration)
(documentation frequency "(frequency ?PROC ?TIME) means that the
&%Process type of ?PROC recurs after every interval of ?TIME.")

(=>
   (frequency ?PROC ?TIME1)
   (forall (?TIME2)
      (=>
         (duration ?TIME2 ?TIME1)
         (exists (?POSITION)
            (and
               (temporalPart ?POSITION ?TIME2)
               (holdsDuring ?POSITION (exists (?INST) (instance ?INST ?PROC))))))))

(instance temporalPart BinaryPredicate)
(instance temporalPart TemporalRelation)
(instance temporalPart PartialOrderingRelation)
(domain temporalPart 1 TimePosition)
(domain temporalPart 2 TimePosition)
(documentation temporalPart "The temporal analogue of the spatial &%part predicate.
(&%temporalPart ?POS1 ?POS2) means that &%TimePosition ?POS1 is part of &%TimePosition ?POS2.  Note that since &%temporalPart is a &%ReflexiveRelation every &%TimePostion is a
&%temporalPart of itself.")

(=>
   (instance ?POINT TimePoint)
   (exists (?INTERVAL)
      (and
         (instance ?INTERVAL TimeInterval)
         (temporalPart ?POINT ?INTERVAL))))

(=>
   (instance ?INTERVAL TimeInterval)
   (exists (?POINT)
      (and
         (instance ?POINT TimePoint)
         (temporalPart ?POINT ?INTERVAL))))

(=>
   (and
      (holdsDuring ?TIME1 ?SITUATION)
      (temporalPart ?TIME2 ?TIME1))
   (holdsDuring ?TIME2 ?SITUATION))

(=>
   (and
      (holdsDuring ?INTERVAL (holds ?REL ?INST1 ?INST2))
      (instance ?INST1 Physical)
      (instance ?INST2 Physical))
   (and
      (time ?INST1 ?INTERVAL)
      (time ?INST2 ?INTERVAL)))

(<=>
   (temporalPart ?POS (WhenFn ?THING))
   (time ?THING ?POS))

(instance BeginFn TemporalRelation)
(instance BeginFn UnaryFunction)
(instance BeginFn TotalValuedRelation)
(domain BeginFn 1 TimeInterval)
(range BeginFn TimePoint)
(documentation BeginFn "A &%UnaryFunction that maps a &%TimeInterval to
the &%TimePoint at which the interval begins.")

(=>
   (origin ?PROCESS ?OBJ)
   (located (WhereFn ?PROCESS (BeginFn (WhenFn ?PROCESS))) (WhereFn ?OBJ (BeginFn (WhenFn ?OBJ)))))

(=>
   (equal (BeginFn ?INTERVAL) ?POINT)
   (forall (?OTHERPOINT)
      (=>
         (and
            (temporalPart ?OTHERPOINT ?INTERVAL)
            (not (equal ?OTHERPOINT ?POINT)))
         (before ?POINT ?OTHERPOINT))))

(instance EndFn TemporalRelation)
(instance EndFn UnaryFunction)
(instance EndFn TotalValuedRelation)
(domain EndFn 1 TimeInterval)
(range EndFn TimePoint)
(documentation EndFn "A &%UnaryFunction that maps a &%TimeInterval to
the &%TimePoint at which the interval ends.")

(=>
   (equal (EndFn ?INTERVAL) ?POINT)
   (forall (?OTHERPOINT)
      (=>
         (and
            (temporalPart ?OTHERPOINT ?INTERVAL)
            (not (equal ?OTHERPOINT ?POINT)))
         (before ?OTHERPOINT ?POINT))))

(=>
     (and
          (resource ?PROC ?OBJ)
          (holdsDuring (BeginFn (WhenFn ?PROC)) (measure ?OBJ ?QUANT1))
          (holdsDuring (EndFn (WhenFn ?PROC)) (measure ?OBJ ?QUANT2)))
     (greaterThan ?QUANT1 ?QUANT2))

(instance starts BinaryPredicate)
(instance starts TemporalRelation)
(instance starts TransitiveRelation)
(instance starts IrreflexiveRelation)
(domain starts 1 TimeInterval)
(domain starts 2 TimeInterval)
(documentation starts "(&%starts ?INTERVAL1 ?INTERVAL2) means that
?INTERVAL1 and ?INTERVAL2 are both &%TimeIntervals that have the same
initial &%TimePoint and that ?INTERVAL1 ends before ?INTERVAL2.")

(<=>
   (starts ?INTERVAL1 ?INTERVAL2)
   (and
      (equal
         (BeginFn ?INTERVAL1)
         (BeginFn ?INTERVAL2))
      (before
         (EndFn ?INTERVAL1)
         (EndFn ?INTERVAL2))))

(instance finishes BinaryPredicate)
(instance finishes TemporalRelation)
(instance finishes TransitiveRelation)
(instance finishes IrreflexiveRelation)
(domain finishes 1 TimeInterval)
(domain finishes 2 TimeInterval)
(documentation finishes "(&%finishes ?INTERVAL1 ?INTERVAL2) means that
?INTERVAL1 and ?INTERVAL2 are both &%TimeIntervals that have the same
ending &%TimePoint and that ?INTERVAL2 begins before ?INTERVAL1.")

(<=>
   (finishes ?INTERVAL1 ?INTERVAL2)
   (and
      (before
         (BeginFn ?INTERVAL2)
         (BeginFn ?INTERVAL1))
      (equal
         (EndFn ?INTERVAL2)
         (EndFn ?INTERVAL1))))

(instance before TemporalRelation)
(instance before IrreflexiveRelation)
(instance before TransitiveRelation)
(subrelation before beforeOrEqual)
(relatedInternalConcept before earlier)
(domain before 1 TimePoint)
(domain before 2 TimePoint)
(documentation before "(&%before ?POINT1 ?POINT2) means that ?POINT1
precedes ?POINT2 on the universal timeline.")

;; An Object exists (and, hence, retains its identity) over time, i.e.,
;; an object exists at every point over some interval of time.

(=>
    (instance ?OBJ Object)
    (exists (?TIME1 ?TIME2)
       (and
         (instance ?TIME1 TimePoint)
         (instance ?TIME2 TimePoint)
         (before ?TIME1 ?TIME2)
         (forall (?TIME)
           (=>
             (and
                (beforeOrEqual ?TIME1 ?TIME)
                (beforeOrEqual ?TIME ?TIME2))
                (time ?OBJ ?TIME))))))

(=>
   (result ?PROC ?OBJ)
   (forall (?TIME)
      (=>
         (before ?TIME (BeginFn (WhenFn ?PROC)))
         (not
            (time ?OBJ ?TIME)))))

(=>
   (instance ?INTERVAL TimeInterval)
   (before (BeginFn ?INTERVAL) (EndFn ?INTERVAL)))

(instance beforeOrEqual BinaryPredicate)
(instance beforeOrEqual TemporalRelation)
(instance beforeOrEqual PartialOrderingRelation)
(domain beforeOrEqual 1 TimePoint)
(domain beforeOrEqual 2 TimePoint)
(documentation beforeOrEqual "(&%beforeOrEqual ?POINT1 ?POINT2) means that ?POINT1
is identical with ?POINT2 or occurs before it on the universal timeline.")

(=>
   (beforeOrEqual ?POINT1 ?POINT2)
   (or
       (before ?POINT1 ?POINT2)
       (equal ?POINT1 ?POINT2)))

(instance temporallyBetween TemporalRelation)
(instance temporallyBetween TernaryPredicate)
(subrelation temporallyBetween temporallyBetweenOrEqual)
(domain temporallyBetween 1 TimePoint)
(domain temporallyBetween 2 TimePoint)
(domain temporallyBetween 3 TimePoint)
(documentation temporallyBetween "(&%temporallyBetween ?POINT1 ?POINT2
?POINT3) means that the &%TimePoint ?POINT2 is between the &%TimePoints
?POINT1 and ?POINT3, i.e. ?POINT1 is before ?POINT2 and ?POINT2 is before
?POINT3.")

(<=>
   (temporallyBetween ?POINT1 ?POINT2 ?POINT3)
   (and
      (before ?POINT1 ?POINT2)
      (before ?POINT2 ?POINT3)))

(instance temporallyBetweenOrEqual TemporalRelation)
(instance temporallyBetweenOrEqual TernaryPredicate)
(domain temporallyBetweenOrEqual 1 TimePoint)
(domain temporallyBetweenOrEqual 2 TimePoint)
(domain temporallyBetweenOrEqual 3 TimePoint)
(documentation temporallyBetweenOrEqual "(&%temporallyBetweenOrEqual ?POINT1 ?POINT2
?POINT3) means that the &%TimePoint ?POINT1 is before or equal to the
&%TimePoint ?POINT2 and ?POINT2 is before or equal to the &%TimePoint
?POINT3.")

(<=>
   (temporallyBetweenOrEqual ?POINT1 ?POINT2 ?POINT3)
   (and
      (beforeOrEqual ?POINT1 ?POINT2)
      (beforeOrEqual ?POINT2 ?POINT3)))

(<=>
   (and
      (time ?PHYS ?TIME)
      (instance ?TIME TimePoint))
   (temporallyBetweenOrEqual (BeginFn (WhenFn ?PHYS)) ?TIME (EndFn (WhenFn ?PHYS))))

(instance overlapsTemporally BinaryPredicate)
(instance overlapsTemporally TemporalRelation)
(instance overlapsTemporally ReflexiveRelation)
(instance overlapsTemporally SymmetricRelation)
(domain overlapsTemporally 1 TimeInterval)
(domain overlapsTemporally 2 TimeInterval)
(documentation overlapsTemporally "(&%overlapsTemporally ?INTERVAL1
?INTERVAL2) means that the &%TimeIntervals ?INTERVAL1 and ?INTERVAL2
have a &%TimeInterval as a common part.")

(<=>
   (overlapsTemporally ?INTERVAL1 ?INTERVAL2)
   (exists (?INTERVAL3)
      (and
         (instance ?INTERVAL3 TimeInterval)
         (temporalPart ?INTERVAL3 ?INTERVAL1)
         (temporalPart ?INTERVAL3 ?INTERVAL2))))

(=>
   (and
      (instance ?REL SpatialRelation)
      (holds ?REL ?OBJ1 ?OBJ2))
   (overlapsTemporally (WhenFn ?OBJ1) (WhenFn ?OBJ2)))

(subrelation during temporalPart)
(instance during TransitiveRelation)
(instance during IrreflexiveRelation)
(subrelation during overlapsTemporally)
(domain during 1 TimeInterval)
(domain during 2 TimeInterval)
(documentation during "(&%during ?INTERVAL1 ?INTERVAL2) means that
?INTERVAL1 starts after and ends before ?INTERVAL2.")

(=>
   (during ?INTERVAL1 ?INTERVAL2)
   (and
      (before (EndFn ?INTERVAL1) (EndFn ?INTERVAL2))
      (before (BeginFn ?INTERVAL2) (BeginFn ?INTERVAL1))))

(instance meetsTemporally BinaryPredicate)
(instance meetsTemporally TemporalRelation)
(instance meetsTemporally AsymmetricRelation)
(instance meetsTemporally IntransitiveRelation)
(domain meetsTemporally 1 TimeInterval)
(domain meetsTemporally 2 TimeInterval)
(documentation meetsTemporally "(&%meetsTemporally ?INTERVAL1 ?INTERVAL2)
means that the terminal point of the &%TimeInterval ?INTERVAL1 is the
initial point of the &%TimeInterval ?INTERVAL2.")

(<=>
   (meetsTemporally ?INTERVAL1 ?INTERVAL2)
   (equal
      (EndFn ?INTERVAL1)
      (BeginFn ?INTERVAL2)))

(=>
  (and
    (equal
      (BeginFn ?INTERVAL1)
      (BeginFn ?INTERVAL2))
    (equal
      (EndFn ?INTERVAL1)
      (EndFn ?INTERVAL2)))
    (equal ?INTERVAL1 ?INTERVAL2))

(instance earlier BinaryPredicate)
(instance earlier TemporalRelation)
(instance earlier TransitiveRelation)
(instance earlier IrreflexiveRelation)
(domain earlier 1 TimeInterval)
(domain earlier 2 TimeInterval)
(documentation earlier "(&%earlier ?INTERVAL1 ?INTERVAL2) means that
the &%TimeInterval ?INTERVAL1 ends before the &%TimeInterval ?INTERVAL2
begins.")

(<=>
    (earlier ?INTERVAL1 ?INTERVAL2)
    (before (EndFn ?INTERVAL1) (BeginFn ?INTERVAL2)))

(instance cooccur BinaryPredicate)
(instance cooccur TemporalRelation)
(instance cooccur EquivalenceRelation)
(domain cooccur 1 Physical)
(domain cooccur 2 Physical)
(documentation cooccur "(&%cooccur ?THING1 ?THING2) means that the
&%Object or &%Process ?THING1 occurs at the same time as, together with,
or jointly with the &%Object or &%Process ?THING2.  This covers the
following temporal relations:  is co-incident with, is concurrent with,
is contemporaneous with, and is concomitant with.")

(<=>
   (cooccur ?PHYS1 ?PHYS2)
   (equal (WhenFn ?PHYS1) (WhenFn ?PHYS2)))

;; The following functions generate &%TimeIntervals.

(instance TimeIntervalFn BinaryFunction)
(instance TimeIntervalFn TemporalRelation)
(domain TimeIntervalFn 1 TimePoint)
(domain TimeIntervalFn 2 TimePoint)
(range TimeIntervalFn TimeInterval)
(documentation TimeIntervalFn "A &%BinaryFunction that takes two &%TimePoints
as arguments and returns the &%TimeInterval defined by these two &%TimePoints.
Note that the first &%TimePoint must occur earlier than the second &%TimePoint.")

(=>
   (and
      (instance ?POINT1 TimePoint)
      (instance ?POINT2 TimePoint)
      (instance ?INTERVAL TimeInterval)
      (equal (TimeIntervalFn ?POINT1 ?POINT2) ?INTERVAL))
   (and
      (equal (BeginFn ?INTERVAL) ?POINT1)
      (equal (EndFn ?INTERVAL) ?POINT2)))

(=>
   (and
      (instance ?POINT1 TimePoint)
      (instance ?POINT2 TimePoint)
      (instance ?INTERVAL TimeInterval)
      (equal (TimeIntervalFn ?POINT1 ?POINT2) ?INTERVAL))
   (forall (?POINT)
      (<=>
         (temporallyBetweenOrEqual ?POINT1 ?POINT ?POINT2)
         (temporalPart ?POINT ?INTERVAL))))

(instance RecurrentTimeIntervalFn TemporalRelation)
(instance RecurrentTimeIntervalFn BinaryFunction)
(domainSubclass RecurrentTimeIntervalFn 1 TimeInterval)
(domainSubclass RecurrentTimeIntervalFn 2 TimeInterval)
(rangeSubclass RecurrentTimeIntervalFn TimeInterval)
(documentation RecurrentTimeIntervalFn "A function that is useful for generating
recurring time intervals.  For example, (&%RecurrentTimeIntervalFn (&%HourFn 6 &%Day)
(&%HourFn 12 &%Day)) returns the &%Class of &%TimeIntervals beginning at 6 in the
morning and ending at 12 noon.  For another example, (&%RecurrentTimeInterval
&%Saturday &%Sunday) returns the &%Class of all weekends.  For still another example,
(&%RecurrentTimeInterval &%June &%August) returns the &%Class containing the academic
summer period.")

(=>
   (instance ?INTERVAL (RecurrentTimeIntervalFn ?TIMECLASS1 ?TIMECLASS2))
   (exists (?TIME1 ?TIME2)
      (and
         (instance ?TIME1 ?TIMECLASS1)
         (instance ?TIME2 ?TIMECLASS2)
         (starts ?TIME1 ?INTERVAL)
         (finishes ?TIME2 ?INTERVAL))))

(instance WhenFn TemporalRelation)
(instance WhenFn UnaryFunction)
(instance WhenFn TotalValuedRelation)
(domain WhenFn 1 Physical)
(range WhenFn TimeInterval)
(documentation WhenFn "A &%UnaryFunction that maps an &%Object or
&%Process to the exact &%TimeInterval during which it exists.  Note
that, for every &%TimePoint ?TIME outside of the &%TimeInterval
(WhenFn ?THING), (time ?THING ?TIME) does not hold.")

(instance PastFn TemporalRelation)
(instance PastFn UnaryFunction)
(instance PastFn TotalValuedRelation)
(domain PastFn 1 TimePosition)
(range PastFn TimeInterval)
(documentation PastFn "A &%UnaryFunction that maps a &%TimePosition
to the &%TimeInterval that meets it and that begins at
&%NegativeInfinity.")

(=>
   (instance ?INTERVAL TimeInterval)
   (meetsTemporally (PastFn ?INTERVAL) ?INTERVAL))

(=>
   (instance ?INTERVAL TimeInterval)
   (equal (PastFn ?INTERVAL) (TimeIntervalFn NegativeInfinity (BeginFn ?INTERVAL))))

(instance ImmediatePastFn TemporalRelation)
(instance ImmediatePastFn UnaryFunction)
(instance ImmediatePastFn TotalValuedRelation)
(domain ImmediatePastFn 1 TimePosition)
(range ImmediatePastFn TimeInterval)
(documentation ImmediatePastFn "A &%UnaryFunction that maps a
&%TimePosition to a short, indeterminate &%TimeInterval that
immediately precedes the &%TimePosition.")

(=>
   (instance ?INTERVAL TimeInterval)
   (finishes (ImmediatePastFn ?INTERVAL) (PastFn ?INTERVAL)))

(instance FutureFn TemporalRelation)
(instance FutureFn UnaryFunction)
(instance FutureFn TotalValuedRelation)
(domain FutureFn 1 TimePosition)
(range FutureFn TimeInterval)
(documentation FutureFn "A &%UnaryFunction that maps a &%TimePosition
to the &%TimeInterval which it meets and which ends at
&%PositiveInfinity.")

(=>
   (instance ?INTERVAL TimeInterval)
   (meetsTemporally ?INTERVAL (FutureFn ?INTERVAL)))

(=>
   (instance ?INTERVAL TimeInterval)
   (equal (FutureFn ?INTERVAL) (TimeIntervalFn (EndFn ?INTERVAL) PositiveInfinity)))

(instance ImmediateFutureFn TemporalRelation)
(instance ImmediateFutureFn UnaryFunction)
(instance ImmediateFutureFn TotalValuedRelation)
(domain ImmediateFutureFn 1 TimePosition)
(range ImmediateFutureFn TimeInterval)
(documentation ImmediateFutureFn "A &%UnaryFunction that maps a
&%TimePosition to a short, indeterminate &%TimeInterval that
immediately follows the &%TimePosition.")

(=>
   (instance ?INTERVAL TimeInterval)
   (starts (ImmediateFutureFn ?INTERVAL) (FutureFn ?INTERVAL)))

;; The following definitions and axioms (down to the next section break)
;; cover the content in the Simple-Time ontology on the Ontolingua server.

(instance date BinaryPredicate)
(instance date SingleValuedRelation)
(instance date AsymmetricRelation)
(domain date 1 Physical)
(domain date 2 Day)
(subrelation date time)
(documentation date "A &%BinaryPredicate that specifies a
&%TimePosition in absolute calendar time, at the resolution
of one day, for a particular &%Object or &%Process.")

(instance YearFn TemporalRelation)
(instance YearFn UnaryFunction)
(domain YearFn 1 Integer)
(rangeSubclass YearFn Year)
(documentation YearFn "A &%UnaryFunction that maps a number to the corresponding calendar
&%Year.  For example, (&%YearFn 1912) returns the &%Class containing just one instance,
the year of 1912.  As might be expected, positive integers return years in the Common Era,
while negative integers return years in B.C.E.  Note that this function returns a &%Class
as a value.  The reason for this is that the related functions, viz. &%MonthFn, &%DayFn,
&%HourFn, &%MinuteFn, and &%SecondFn, are used to generate both specific &%TimeIntervals
and recurrent intervals, and the only way to do this is to make the domains and ranges of
these functions classes rather than individuals.")

(instance MonthFn TemporalRelation)
(instance MonthFn BinaryFunction)
(domainSubclass MonthFn 1 Month)
(domainSubclass MonthFn 2 Year)
(rangeSubclass MonthFn Month)
(documentation MonthFn "A &%BinaryFunction that maps a subclass of &%Month and a
subclass of &%Year to the class containing the &%Months corresponding to thos &%Years.
For example (&%MonthFn &%January (&%YearFn 1912)) is the class containing the eighth
&%Month, i.e. August, of the &%Year 1912.  For another example, (&%MonthFn &%August
&%Year) is equal to &%August, the class of all months of August.  Note that this function
returns a &%Class as a value.  The reason for this is that the related functions, viz.
DayFn, HourFn, MinuteFn, and SecondFn, are used to generate both specific &%TimeIntervals
and recurrent intervals, and the only way to do this is to make the domains and ranges of
these functions classes rather than individuals.")

(instance DayFn TemporalRelation)
(instance DayFn BinaryFunction)
(domain DayFn 1 PositiveRealNumber)
(domainSubclass DayFn 2 Month)
(rangeSubclass DayFn Day)
(documentation DayFn "A &%BinaryFunction that assigns a &%PositiveRealNumber and
a subclass of &%Months to the &%Days within each &%Month corresponding to that
&%PositiveRealNumber.  For example, (&%DayFn 16 &%August) is the &%Class of all
sixteenth days of August.  For another example, (&%DayFn 9 &%Month) would return
the class of all ninth days of any month.  For still another example, (&%DayFn 18
(&%MonthFn 8 (YearFn 1912))) denotes the 18th day of August 1912.")

(=>
   (instance ?DAY (DayFn ?NUMBER ?MONTH))
   (lessThanOrEqualTo ?NUMBER 31))

(=>
   (and
      (instance ?DAY1 (DayFn ?NUMBER1 ?MONTH))
      (instance ?DAY2 (DayFn ?NUMBER2 ?MONTH))
      (equal (SubtractionFn ?NUMBER2 ?NUMBER1) 1))
   (meetsTemporally ?DAY1 ?DAY2))

(instance HourFn TemporalRelation)
(instance HourFn BinaryFunction)
(domain HourFn 1 PositiveRealNumber)
(domainSubclass HourFn 2 Day)
(rangeSubclass HourFn Hour)
(documentation HourFn "A &%BinaryFunction that assigns a &%PositiveRealNumber and
a subclass of &%Days to the &%Hours within each &%Day corresponding to that
&%PositiveRealNumber.  For example, (&%HourFn 12 &%Thursday) is the &%Class of all
instances of noon Thursday.  For another example, (&%HourFn 24 &%Day) would return
the class of all instances of midnight.  For still another example, (&%HourFn 14
(&%DayFn 18 (&%MonthFn 8 (YearFn 1912)))) denotes 2 PM on the 18th day of August
1912.")

(=>
   (instance ?HOUR (HourFn ?NUMBER ?DAY))
   (lessThan ?NUMBER 24))

(=>
   (and
      (instance ?HOUR1 (HourFn ?NUMBER1 ?DAY))
      (instance ?HOUR2 (HourFn ?NUMBER2 ?DAY))
      (equal (SubtractionFn ?NUMBER2 ?NUMBER1) 1))
   (meetsTemporally ?HOUR1 ?HOUR2))

(instance MinuteFn TemporalRelation)
(instance MinuteFn BinaryFunction)
(domain MinuteFn 1 PositiveRealNumber)
(domainSubclass MinuteFn 2 Hour)
(rangeSubclass MinuteFn Minute)
(documentation MinuteFn "A &%BinaryFunction that assigns a &%PositiveRealNumber and
a subclass of &%Hours to the &%Minutes within each &%Hour corresponding to that
&%PositiveRealNumber.  For example, (&%MinuteFn 30 (&%HourFn 17 &%Day)) is the &%Class
of all 5:30's in the afternoon.  For another example, (&%MinuteFn 15 &%Hour) would return
the class of all instances of quarter past the hour.  For still another example,
(&%MinuteFn 15 (&%HourFn 14 (&%DayFn 18 (&%MonthFn 8 (YearFn 1912))))) denotes 15
minutes after 2 PM on the 18th day of August 1912.")

(=>
   (instance ?MINUTE (MinuteFn ?NUMBER ?HOUR))
   (lessThan ?NUMBER 60))

(=>
   (and
      (instance ?MINUTE1 (MinuteFn ?NUMBER1 ?HOUR))
      (instance ?MINUTE2 (MinuteFn ?NUMBER2 ?HOUR))
      (equal (SubtractionFn ?NUMBER2 ?NUMBER1) 1))
   (meetsTemporally ?MINUTE1 ?MINUTE2))

(instance SecondFn TemporalRelation)
(instance SecondFn BinaryFunction)
(domain SecondFn 1 PositiveRealNumber)
(domainSubclass SecondFn 2 Minute)
(rangeSubclass SecondFn Second)
(documentation SecondFn "A &%BinaryFunction that assigns a &%PositiveRealNumber and a
subclass of &%Minutes to the &%Seconds within each &%Minute corresponding to that
&%PositiveRealNumber.  For example, (&%SecondFn 4 (&%MinuteFn 5 &%Hour)) is the &%Class
of all fourth &%Seconds of every fifth &%Minute of every hour.  For another example,
(&%SecondFn 8 &%Minute) would return the eighth second of every minute.  For still
another example, (&%SecondFn 9 (&%MinuteFn 15 (&%HourFn 14 (&%DayFn 18 (&%MonthFn 8
(YearFn 1912)))))) denotes 9 seconds and 15 minutes after 2 PM on the 18th day of
August 1912.")

(=>
   (instance ?SECOND (SecondFn ?NUMBER ?MINUTE))
   (lessThan ?NUMBER 60))

(=>
   (and
      (instance ?SECOND1 (SecondFn ?NUMBER1 ?MINUTE))
      (instance ?SECOND2 (SecondFn ?NUMBER2 ?MINUTE))
      (equal (SubtractionFn ?NUMBER2 ?NUMBER1) 1))
   (meetsTemporally ?SECOND1 ?SECOND2))

(subclass Year TimeInterval)
(relatedInternalConcept Year YearFn)
(relatedInternalConcept Year YearDuration)
(documentation Year "The &%Class of all calendar &%Years.")

(=>
   (instance ?YEAR Year)
   (duration ?YEAR (MeasureFn 1 YearDuration)))

(=>
   (and
      (instance ?YEAR1 Year)
      (instance ?YEAR2 Year)
      (equal (SubtractionFn ?YEAR2 ?YEAR1) 1))
   (meetsTemporally ?YEAR1 ?YEAR2))

(subclass LeapYear Year)
(documentation LeapYear "The &%Class of all leap years.  These are years
which are either (i.) evenly divisible by 4 and not by 100 or (ii.) evenly
divisible by 400 (this latter case is known as a leap century).")

(=>
   (and
      (instance ?LEAP LeapYear)
      (equal ?LEAP (MeasureFn ?NUMBER Year)))
   (or
      (and
         (equal (RemainderFn ?NUMBER 4) 0)
         (not (equal (RemainderFn ?NUMBER 100) 0)))
      (equal (RemainderFn ?NUMBER 400) 0)))

(subclass Month TimeInterval)
(relatedInternalConcept Month MonthFn)
(documentation Month "The &%Class of all calendar &%Months.")

(subclass January Month)
(documentation January "The &%Class of all &%Months which are January.")

(=>
   (instance ?MONTH January)
   (duration ?MONTH (MeasureFn 31 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn January ?YEAR))
      (equal ?MONTH2 (MonthFn February ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass February Month)
(documentation February "The &%Class of all &%Months which are February.")

(=>
   (and
      (equal (MonthFn February ?YEAR) ?MONTH)
      (not (instance ?YEAR LeapYear)))
   (duration ?MONTH (MeasureFn 28 DayDuration)))

(=>
   (and
      (equal (MonthFn February ?YEAR) ?MONTH)
      (instance ?YEAR LeapYear))
   (duration ?MONTH (MeasureFn 29 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn February ?YEAR))
      (equal ?MONTH2 (MonthFn March ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass March Month)
(documentation March "The &%Class of all &%Months which are March.")

(=>
   (instance ?MONTH March)
   (duration ?MONTH (MeasureFn 31 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn March ?YEAR))
      (equal ?MONTH2 (MonthFn April ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass April Month)
(documentation April "The &%Class of all &%Months which are April.")

(=>
   (instance ?MONTH April)
   (duration ?MONTH (MeasureFn 30 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn April ?YEAR))
      (equal ?MONTH2 (MonthFn May ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass May Month)
(documentation May "The &%Class of all &%Months which are May.")

(=>
   (instance ?MONTH May)
   (duration ?MONTH (MeasureFn 31 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn May ?YEAR))
      (equal ?MONTH2 (MonthFn June ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass June Month)
(documentation June "The &%Class of all &%Months which are June.")

(=>
   (instance ?MONTH June)
   (duration ?MONTH (MeasureFn 30 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn June ?YEAR))
      (equal ?MONTH2 (MonthFn July ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass July Month)
(documentation July "The &%Class of all &%Months which are July.")

(=>
   (instance ?MONTH July)
   (duration ?MONTH (MeasureFn 31 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn July ?YEAR))
      (equal ?MONTH2 (MonthFn August ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass August Month)
(documentation August "The &%Class of all &%Months which are August.")

(=>
   (instance ?MONTH August)
   (duration ?MONTH (MeasureFn 31 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn August ?YEAR))
      (equal ?MONTH2 (MonthFn September ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass September Month)
(documentation September "The &%Class of all &%Months which are September.")

(=>
   (instance ?MONTH September)
   (duration ?MONTH (MeasureFn 30 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn September ?YEAR))
      (equal ?MONTH2 (MonthFn October ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass October Month)
(documentation October "The &%Class of all &%Months which are October.")

(=>
   (instance ?MONTH October)
   (duration ?MONTH (MeasureFn 31 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn October ?YEAR))
      (equal ?MONTH2 (MonthFn November ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass November Month)
(documentation November "The &%Class of all &%Months which are November.")

(=>
   (instance ?MONTH November)
   (duration ?MONTH (MeasureFn 30 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn November ?YEAR))
      (equal ?MONTH2 (MonthFn December ?YEAR)))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass December Month)
(documentation December "The &%Class of all &%Months which are December.")

(=>
   (instance ?MONTH December)
   (duration ?MONTH (MeasureFn 31 DayDuration)))

(=>
   (and
      (equal ?MONTH1 (MonthFn December ?YEAR1))
      (equal ?MONTH2 (MonthFn January ?YEAR2))
      (meetsTemporally ?YEAR1 ?YEAR2))
   (meetsTemporally ?MONTH1 ?MONTH2))

(subclass Day TimeInterval)
(relatedInternalConcept Day DayFn)
(relatedInternalConcept Day DayDuration)
(documentation Day "The &%Class of all calendar &%Days.")

(=>
   (instance ?DAY Day)
   (duration ?DAY (MeasureFn 1 DayDuration)))

(subclass Monday Day)
(documentation Monday "The &%Class of all calendar Mondays.")

(subclass Tuesday Day)
(documentation Tuesday "The &%Class of all calendar Tuesdays.")

(=>
   (and
      (instance ?DAY1 Monday)
      (instance ?DAY2 Tuesday)
      (instance ?WEEK Week)
      (temporalPart ?DAY1 ?WEEK)
      (temporalPart ?DAY2 ?WEEK))
   (meetsTemporally ?DAY1 ?DAY2))

(subclass Wednesday Day)
(documentation Wednesday "The &%Class of all calendar Wednesdays.")

(=>
   (and
      (instance ?DAY1 Tuesday)
      (instance ?DAY2 Wednesday)
      (instance ?WEEK Week)
      (temporalPart ?DAY1 ?WEEK)
      (temporalPart ?DAY2 ?WEEK))
   (meetsTemporally ?DAY1 ?DAY2))

(subclass Thursday Day)
(documentation Thursday "The &%Class of all calendar Thursdays.")

(=>
   (and
      (instance ?DAY1 Wednesday)
      (instance ?DAY2 Thursday)
      (instance ?WEEK Week)
      (temporalPart ?DAY1 ?WEEK)
      (temporalPart ?DAY2 ?WEEK))
   (meetsTemporally ?DAY1 ?DAY2))

(subclass Friday Day)
(documentation Friday "The &%Class of all calendar Fridays.")

(=>
   (and
      (instance ?DAY1 Thursday)
      (instance ?DAY2 Friday)
      (instance ?WEEK Week)
      (temporalPart ?DAY1 ?WEEK)
      (temporalPart ?DAY2 ?WEEK))
   (meetsTemporally ?DAY1 ?DAY2))

(subclass Saturday Day)
(documentation Saturday "The &%Class of all calendar Saturdays.")

(=>
   (and
      (instance ?DAY1 Friday)
      (instance ?DAY2 Saturday)
      (instance ?WEEK Week)
      (temporalPart ?DAY1 ?WEEK)
      (temporalPart ?DAY2 ?WEEK))
   (meetsTemporally ?DAY1 ?DAY2))

(subclass Sunday Day)
(documentation Sunday "The &%Class of all calendar Sundays.")

(=>
   (and
      (instance ?DAY1 Saturday)
      (instance ?DAY2 Sunday)
      (instance ?WEEK Week)
      (temporalPart ?DAY1 ?WEEK)
      (temporalPart ?DAY2 ?WEEK))
   (meetsTemporally ?DAY1 ?DAY2))

(=>
   (and
      (instance ?DAY1 Sunday)
      (instance ?DAY2 Monday)
      (instance ?WEEK1 Week)
      (instance ?WEEK2 Week)
      (temporalPart ?DAY1 ?WEEK1)
      (temporalPart ?DAY2 ?WEEK2)
      (meetsTemporally ?WEEK1 ?WEEK2))
   (meetsTemporally ?DAY1 ?DAY2))

(subclass Week TimeInterval)
(documentation Week "The &%Class of all calendar weeks.")

(=>
   (instance ?WEEK Week)
   (duration ?WEEK (MeasureFn 1 WeekDuration)))

(subclass Hour TimeInterval)
(relatedInternalConcept Hour HourFn)
(relatedInternalConcept Hour HourDuration)
(documentation Hour "The &%Class of all clock &%Hours.")

(=>
   (instance ?HOUR Hour)
   (duration ?HOUR (MeasureFn 1 HourDuration)))

(subclass Minute TimeInterval)
(relatedInternalConcept Minute MinuteFn)
(relatedInternalConcept Minute MinuteDuration)
(documentation Minute "The &%Class of all clock &%Minutes.")

(=>
   (instance ?MINUTE Minute)
   (duration ?MINUTE (MeasureFn 1 MinuteDuration)))

(subclass Second TimeInterval)
(relatedInternalConcept Second SecondDuration)
(relatedInternalConcept Second SecondFn)
(documentation Second "The &%Class of all clock &%Seconds.")

(=>
   (instance ?SECOND Second)
   (duration ?SECOND (MeasureFn 1 SecondDuration)))

(instance TemporalCompositionFn TemporalRelation)
(instance TemporalCompositionFn BinaryFunction)
(domain TemporalCompositionFn 1 TimeInterval)
(domainSubclass TemporalCompositionFn 2 TimeInterval)
(rangeSubclass TemporalCompositionFn TimeInterval)
(documentation TemporalCompositionFn "The basic &%Function for expressing
the composition of larger &%TimeIntervals out of smaller &%TimeIntervals.
For example, if &%ThisSeptember is an &%instance of &%September,
(&%TemporalCompositionFn &%ThisSeptember &%Day) denotes the &%Class of
consecutive days that make up &%ThisSeptember.  Note that one can obtain
the number of instances of this &%Class by using the function &%CardinalityFn.")

(=>
   (equal (TemporalCompositionFn ?INTERVAL ?INTERVAL-TYPE) ?CLASS)
   (forall (?TIME1 ?TIME2)
      (=>
         (and
            (instance ?TIME1 ?INTERVAL-TYPE)
            (instance ?TIME2 ?CLASS))
         (exists (?DURATION)
            (and
               (duration ?TIME1 ?DURATION)
               (duration ?TIME2 ?DURATION))))))

(=>
   (equal (TemporalCompositionFn ?INTERVAL ?INTERVAL-TYPE) ?CLASS)
   (forall (?TIME1 ?TIME2)
      (=>
         (and
            (instance ?TIME1 ?CLASS)
            (instance ?TIME2 ?CLASS)
            (not (equal ?TIME1 ?TIME2)))
         (or
            (meetsTemporally ?TIME1 ?TIME2)
            (meetsTemporally ?TIME2 ?TIME1)
            (earlier ?TIME1 ?TIME2)
            (earlier ?TIME2 ?TIME1)))))

(=>
   (equal (TemporalCompositionFn ?INTERVAL ?INTERVAL-TYPE) ?CLASS)
   (exists (?TIME)
      (and
         (instance ?TIME ?CLASS)
         (starts ?TIME ?INTERVAL))))

(=>
   (equal (TemporalCompositionFn ?INTERVAL ?INTERVAL-TYPE) ?CLASS)
   (exists (?TIME)
      (and
         (instance ?TIME ?CLASS)
         (finishes ?TIME ?INTERVAL))))

(=>
   (equal (TemporalCompositionFn ?INTERVAL ?INTERVAL-TYPE) ?CLASS)
   (forall (?TIME1)
      (=>
         (and
            (instance ?TIME1 ?CLASS)
            (not (finishes ?TIME1 ?INTERVAL)))
         (exists (?TIME2)
            (and
               (instance ?TIME2 ?CLASS)
               (meetsTemporally ?TIME1 ?TIME2))))))

(=>
   (equal (TemporalCompositionFn ?INTERVAL ?INTERVAL-TYPE) ?CLASS)
   (forall (?TIME1)
      (=>
         (and
            (instance ?TIME1 ?CLASS)
            (not (starts ?TIME1 ?INTERVAL)))
         (exists (?TIME2)
            (and
               (instance ?TIME2 ?CLASS)
               (meetsTemporally ?TIME2 ?TIME1))))))

(=>
   (equal (TemporalCompositionFn ?INTERVAL ?INTERVAL-TYPE) ?CLASS)
   (forall (?TIME)
      (=>
         (and
            (instance ?TIME TimePoint)
            (temporalPart ?TIME ?INTERVAL))
         (exists (?INSTANCE)
            (and
               (instance ?INSTANCE ?CLASS)
               (temporalPart ?TIME ?INSTANCE))))))

(=>
   (instance ?YEAR Year)
   (equal (CardinalityFn (TemporalCompositionFn ?YEAR Month)) 12))

(=>
   (and
      (instance ?MONTH Month)
      (duration ?MONTH (MeasureFn ?NUMBER DayDuration)))
   (equal (CardinalityFn (TemporalCompositionFn ?MONTH Day)) ?NUMBER))

(=>
   (instance ?WEEK Week)
   (equal (CardinalityFn (TemporalCompositionFn ?WEEK Day)) 7))

(=>
   (instance ?DAY Day)
   (equal (CardinalityFn (TemporalCompositionFn ?DAY Hour)) 24))

(=>
   (instance ?HOUR Hour)
   (equal (CardinalityFn (TemporalCompositionFn ?HOUR Minute)) 60))

(=>
   (instance ?MINUTE Minute)
   (equal (CardinalityFn (TemporalCompositionFn ?MINUTE Second)) 60))


;; END FILE

;; <module>MEREOTOPOLOGY</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;
;; MEREOTOPOLOGY ;;
;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'STRUCTURAL ONTOLOGY'
;; INCLUDES 'BASE ONTOLOGY'

;; Most of this content is taken from Barry Smith's and Nicola Guarino's
;; papers on the subject.

(instance connected BinaryPredicate)
(instance connected SpatialRelation)
(instance connected ReflexiveRelation)
(instance connected SymmetricRelation)
(domain connected 1 Object)
(domain connected 2 Object)
(documentation connected "(connected ?OBJ1 ?OBJ2) means that ?OBJ1
&%meetsSpatially ?OBJ2 or that ?OBJ1 &%overlapsSpatially ?OBJ2.")

(=>
     (connected ?OBJ1 ?OBJ2)
     (or
          (meetsSpatially ?OBJ1 ?OBJ2)
          (overlapsSpatially ?OBJ1 ?OBJ2)))

(<=>
   (instance ?OBJ SelfConnectedObject)
   (forall (?PART1 ?PART2)
      (=>
        (equal ?OBJ (MereologicalSumFn ?PART1 ?PART2))
        (connected ?PART1 ?PART2))))

(instance connects SpatialRelation)
(instance connects TernaryPredicate)
(domain connects 1 SelfConnectedObject)
(domain connects 2 SelfConnectedObject)
(domain connects 3 SelfConnectedObject)
(documentation connects "The relationship between three things, when one of
the three things connects the other two.  More formally, (&%connects ?OBJ1
?OBJ2 ?OBJ3) means that (&%connected ?OBJ1 ?OBJ2) and (&%connected ?OBJ1 ?OBJ3)
and not (&%connected ?OBJ2 ?OBJ3).")

(<=>
   (connects ?OBJ1 ?OBJ2 ?OBJ3)
   (and
      (connected ?OBJ1 ?OBJ2)
      (connected ?OBJ1 ?OBJ3)
      (not
         (connected ?OBJ2 ?OBJ3))))

(subrelation meetsSpatially connected)
(instance meetsSpatially IrreflexiveRelation)
(instance meetsSpatially SymmetricRelation)
(disjointRelation meetsSpatially overlapsSpatially)
(documentation meetsSpatially "(&%meetsSpatially ?OBJ1 ?OBJ2) means that
?OBJ1 and ?OBJ2 are &%connected but that neither ?OBJ1 nor ?OBJ2
&%overlapsSpatially the other.")

(subrelation overlapsSpatially connected)
(instance overlapsSpatially ReflexiveRelation)
(instance overlapsSpatially SymmetricRelation)
(documentation overlapsSpatially "(&%overlapsSpatially ?OBJ1 ?OBJ2) means
that the &%Objects ?OBJ1 and ?OBJ2 have some parts in common.  This is a
reflexive and symmetric (but not transitive) relation.")

(<=>
	(overlapsSpatially ?OBJ1 ?OBJ2)
     	(exists (?OBJ3)
          	(and
               	(part ?OBJ3 ?OBJ1)
               	(part ?OBJ3 ?OBJ2))))

(=>
   (and
      (member ?OBJ1 ?COLL)
      (member ?OBJ2 ?COLL)
	(not (equal ?OBJ1 ?OBJ2)))
   (not
         (overlapsSpatially ?OBJ1 ?OBJ2)))

(=>
   (and
      (instance ?REL CaseRole)
      (instance ?OBJ Object)
      (holds ?REL ?PROCESS ?OBJ))
   (exists (?TIME)
      (overlapsSpatially (WhereFn ?PROCESS ?TIME) ?OBJ)))

(instance overlapsPartially SymmetricRelation)
(instance overlapsPartially IrreflexiveRelation)
(subrelation overlapsPartially overlapsSpatially)
(documentation overlapsPartially "(&%overlapsPartially ?OBJ1 ?OBJ2) means
that ?OBJ1 and ?OBJ2 have part(s) in common, but neither ?OBJ1 nor ?OBJ2
is a &%part of the other.")

(<=>
   (overlapsPartially ?OBJ1 ?OBJ2)
      (and
         (not (part ?OBJ1 ?OBJ2))
         (not (part ?OBJ2 ?OBJ1))
         (exists (?OBJ3)
            (and
               (part ?OBJ3 ?OBJ1)
               (part ?OBJ3 ?OBJ2)))))

(subrelation superficialPart part)
(instance superficialPart IrreflexiveRelation)
(instance superficialPart TransitiveRelation)
(documentation superficialPart "(&%superficialPart ?OBJ1 ?OBJ2)
means that ?OBJ1 is a part of ?OBJ2 that has no interior parts of its own
(or, intuitively, that only overlaps those parts of ?OBJ2 that are
externally connected with the mereological complement of ?OBJ2). This too
is a transitive relation closed under &%MereologicalSumFn and
&%MereologicalProductFn.")

(=>
	(superficialPart ?OBJ1 ?OBJ2)
	(and
		(not
			(interiorPart ?OBJ1 ?OBJ2))
		(not
			(exists (?OBJ3)
				(interiorPart ?OBJ3 ?OBJ1)))))

(instance surface AsymmetricRelation)
(subrelation surface superficialPart)
(domain surface 1 SelfConnectedObject)
(domain surface 2 SelfConnectedObject)
(documentation surface "(&%surface ?OBJ1 ?OBJ2) means that ?OBJ1
is a maximally connected &%superficialPart of ?OBJ2.  Note that some
&%SelfConnectedObjects have more than one surface, e.g. a hollow
object like a tennis ball has both an inner and an outer surface.")

(=>
   (surface ?OBJ1 ?OBJ2)
   (forall (?OBJ3)
      (=>
	   (superficialPart ?OBJ3 ?OBJ2)
	   (part ?OBJ3 ?OBJ1))))

(subrelation interiorPart part)
(instance interiorPart AsymmetricRelation)
(instance interiorPart TransitiveRelation)
(documentation interiorPart "(&%interiorPart ?OBJ1 ?OBJ2) means
that ?OBJ1 is part ?OBJ2 and there is no overlap between ?OBJ1 and
any &%superficialPart ?OBJ2.")

(=>
	(interiorPart ?OBJ1 ?OBJ2)
     	(forall (?PART)
               	(=>
                    	(superficialPart ?PART ?OBJ2)
                    	(not
                         	(overlapsSpatially ?OBJ1 ?PART)))))

(subrelation bottom superficialPart)
(domain bottom 1 SelfConnectedObject)
(domain bottom 2 SelfConnectedObject)
(documentation bottom "(&%bottom ?BOTTOM ?OBJECT) holds if ?BOTTOM is the
lowest or deepest maximal superficial part of ?OBJECT.")

(=>
	(and
		(bottom ?BOTTOM ?OBJECT)
		(part ?PART ?OBJECT)
		(not (connected ?PART ?BOTTOM)))
	(orientation ?PART ?BOTTOM Above))

(subrelation top superficialPart)
(domain top 1 SelfConnectedObject)
(domain top 2 SelfConnectedObject)
(documentation top "(&%top ?TOP ?OBJECT) means that ?TOP is the highest maximal
superficial part of ?OBJECT.")

(=>
	(and
		(top ?TOP ?OBJECT)
		(part ?PART ?OBJECT)
		(not (connected ?PART ?TOP)))
	(orientation ?PART ?TOP Below))

(subrelation side superficialPart)
(domain side 1 SelfConnectedObject)
(domain side 2 SelfConnectedObject)
(documentation side "(&%side ?SIDE ?OBJECT) means that ?SIDE is a side of the object,
as opposed to the &%top or &%bottom.")

(=>
	(and
		(side ?SIDE ?OBJECT)
		(part ?PART ?OBJECT)
		(not (connected ?PART ?SIDE)))
      (exists (?DIRECT)
	      (orientation ?SIDE ?PART ?DIRECT)))

(<=>
	(width ?OBJECT ?WIDTH)
	(exists (?SIDE1 ?SIDE2)
		(and
			(side ?SIDE1 ?OBJECT)
			(side ?SIDE2 ?OBJECT)
			(distance ?SIDE1 ?SIDE2 ?WIDTH))))

(subrelation height length)
(domain height 1 SelfConnectedObject)
(domain height 2 LengthMeasure)
(documentation height "The height of an &%Object is the distance between
its &%top and its &%bottom.")

(=>
	(and
		(height ?OBJECT ?HEIGHT)
		(top ?TOP ?OBJECT)
            (bottom ?BOTTOM ?OBJECT))
	(distance ?TOP ?BOTTOM ?HEIGHT))

(instance MereologicalSumFn SpatialRelation)
(instance MereologicalSumFn BinaryFunction)
(instance MereologicalSumFn TotalValuedRelation)
(domain MereologicalSumFn 1 Object)
(domain MereologicalSumFn 2 Object)
(range MereologicalSumFn Object)
(relatedInternalConcept MereologicalSumFn MereologicalProductFn)
(relatedInternalConcept MereologicalSumFn MereologicalDifferenceFn)
(documentation MereologicalSumFn "(&%MereologicalSumFn ?OBJ1 ?OBJ2)
denotes the &%Object consisting of the parts which belong to either
?OBJ1 or ?OBJ2.")

(=>
     (equal ?OBJ3 (MereologicalSumFn ?OBJ1 ?OBJ2))
     (forall (?PART)
	       (<=>
	            (part ?PART ?OBJ3)
		      (or
	  	           (part ?PART ?OBJ1)
			     (part ?PART ?OBJ2)))))

(instance MereologicalProductFn SpatialRelation)
(instance MereologicalProductFn BinaryFunction)
(instance MereologicalProductFn TotalValuedRelation)
(domain MereologicalProductFn 1 Object)
(domain MereologicalProductFn 2 Object)
(range MereologicalProductFn Object)
(relatedInternalConcept MereologicalProductFn MereologicalDifferenceFn)
(documentation MereologicalProductFn "(&%MereologicalProductFn ?OBJ1 ?OBJ2)
denotes the &%Object consisting of the parts which belong to both ?OBJ1
and ?OBJ2.")

(=>
     (equal ?OBJ3 (MereologicalProductFn ?OBJ1 ?OBJ2))
     (forall (?PART)
	       (<=>
	            (part ?PART ?OBJ3)
		      (and
	  	           (part ?PART ?OBJ1)
			     (part ?PART ?OBJ2)))))

(instance MereologicalDifferenceFn SpatialRelation)
(instance MereologicalDifferenceFn BinaryFunction)
(instance MereologicalDifferenceFn TotalValuedRelation)
(domain MereologicalDifferenceFn 1 Object)
(domain MereologicalDifferenceFn 2 Object)
(range MereologicalDifferenceFn Object)
(documentation MereologicalDifferenceFn "(&%MereologicalDifferenceFn ?OBJ1
?OBJ2) denotes the &%Object consisting of the parts which belong to ?OBJ1
and not to ?OBJ2.")

(=>
     (equal ?OBJ3 (MereologicalDifferenceFn ?OBJ1 ?OBJ2))
     (forall (?PART)
	       (<=>
	            (part ?PART ?OBJ3)
		      (and
	  	           (part ?PART ?OBJ1)
                       (not
			          (part ?PART ?OBJ2))))))

;; What follows is an alignment of Casati and Varzi's formal theory of
;; holes with the SUMO.

(instance hole BinaryPredicate)
(instance hole SpatialRelation)
(instance hole AsymmetricRelation)
(domain hole 1 Hole)
(domain hole 2 SelfConnectedObject)
(documentation hole "(&%hole ?HOLE ?OBJ) means that ?HOLE is a
&%Hole in ?OBJ.  A &%Hole is a fillable body located at the
&%surface an &%Object.")

(subclass Hole Region)
(documentation Hole "A hole is an immaterial body located at the surface
of an &%Object.  Since every &%Hole is ontologically dependent on its host
(i.e., the object in which it is a hole), being a &%Hole is defined as
being a &%hole in something.  Note that two &%Holes may occupy the same
region, or part of the same region, without sharing any parts.")

(<=>
	(instance ?HOLE Hole)
	(exists (?OBJ)
		(hole ?HOLE ?OBJ)))

(=>
	(hole ?HOLE ?OBJ)
      (not
		(instance ?OBJ Hole)))

(=>
	(hole ?HOLE ?OBJ)
          (not
		 (overlapsSpatially ?HOLE ?OBJ)))

;; Any two hosts of a hole have a common proper part that entirely hosts
;; the hole.

(=>
	(and
		(hole ?HOLE ?OBJ1)
            (hole ?HOLE ?OBJ2))
      (exists (?OBJ3)
             (and
			(properPart ?OBJ3 (MereologicalProductFn ?OBJ1 ?OBJ2))
                  (hole ?HOLE ?OBJ3))))

;; A common host of two holes hosts all parts of the sum of those holes.

(=>
	(and
		(hole ?HOLE1 ?OBJ)
      	(hole ?HOLE2 ?OBJ))
     	(forall (?HOLE3)
        	(=>
			(part ?HOLE3 (MereologicalSumFn ?HOLE1 ?HOLE2))
                  (hole ?HOLE3 ?OBJ))))

;; Any object that includes the host of a hole is a host of that hole,
;; unless its parts also include parts of that very hole.

(=>
	(and
		(hole ?HOLE ?OBJ1)
            (part ?OBJ1 ?OBJ2))
      (or
		(overlapsSpatially ?HOLE ?OBJ2)
            (hole ?HOLE ?OBJ2)))

;; Overlapping holes have overlapping hosts.

(=>
	(and
		(hole ?HOLE1 ?OBJ1)
            (hole ?HOLE2 ?OBJ2)
            (overlapsSpatially ?HOLE1 ?HOLE2))
      (overlapsSpatially ?OBJ1 ?OBJ2))

;; No hole is atomic

(=>
	(instance ?HOLE1 Hole)
      (exists (?HOLE2)
      	(properPart ?HOLE2 ?HOLE1)))

;; Topological Definitions

;; Definition of 'PrincipalHostFn'

(instance PrincipalHostFn SpatialRelation)
(instance PrincipalHostFn UnaryFunction)
(instance PrincipalHostFn TotalValuedRelation)
(instance PrincipalHostFn AsymmetricRelation)
(domain PrincipalHostFn 1 Hole)
(range PrincipalHostFn Object)
(documentation PrincipalHostFn "A &%UnaryFunction that maps a &%Hole to
the &%Object which is its principal host.  The principle host of a &%Hole
is its maximally connected host (a notion taken here to be defined only
when the argument is a hole).")

(=>
     (equal ?OBJ1 (PrincipalHostFn ?HOLE))
     (forall (?OBJ2)
		(<=>
			(overlapsSpatially ?OBJ2 ?OBJ1)
			(exists (?OBJ3)
				(and
					(hole ?HOLE ?OBJ3)
				      (overlapsSpatially ?OBJ2 ?OBJ3))))))

;; Holes are connected with their hosts.

(=>
	(hole ?HOLE ?OBJ)
      (connected ?HOLE ?OBJ))

;; No hole can have a proper part that is externally connected
;; with exactly the same things as the hole itself.

(=>
	(and
		(instance ?HOLE1 Hole)
            (properPart ?HOLE2 ?HOLE1))
      (exists (?OBJ)
            (and
			(meetsSpatially ?HOLE1 ?OBJ)
                  (not
				(meetsSpatially ?HOLE2 ?OBJ)))))

(instance Fillable ShapeAttribute)
(documentation Fillable "Something is &%Fillable if it can be filled by
something else.  Note that 'filled' here means perfectly filled.")

(=>
   (exists (?TIME)
      (holdsDuring ?TIME
         (fills ?OBJ ?HOLE)))
     (attribute ?HOLE Fillable))

;; Something is fillable just in case it is part of a hole; i.e.,
;; fillability is an exclusive property of holes and their parts.

(<=>
	(attribute ?HOLE1 Fillable)
       	(exists (?HOLE2)
        	(and
			(instance ?HOLE2 Hole)
                  (part ?HOLE1 ?HOLE2))))

(subrelation partiallyFills located)
(instance partiallyFills SpatialRelation)
(instance partiallyFills AsymmetricRelation)
(domain partiallyFills 1 Object)
(domain partiallyFills 2 Hole)
(documentation partiallyFills "(&%partiallyFills ?OBJ ?HOLE) means that
?OBJ &%completelyFills some part of ?HOLE. Note that if (&%partiallyFills
?OBJ1 ?HOLE) and (&%part ?OBJ1 ?OBJ2), then (&%partiallyFills ?OBJ2 ?HOLE).
Note too that a partial filler need not be wholly inside a hole (it may
stick out), which means that every complete filler also qualifies as
(is a limit case of) a partial one.")

(=>
	(partiallyFills ?OBJ ?HOLE1)
	(exists (?HOLE2)
		(and
			(part ?HOLE2 ?HOLE1)
			(completelyFills ?OBJ ?HOLE2))))

(instance properlyFills AsymmetricRelation)
(subrelation properlyFills partiallyFills)
(domain properlyFills 1 Object)
(domain properlyFills 2 Hole)
(documentation properlyFills "(&%properlyFills ?OBJ ?HOLE)
means that ?HOLE is properly (though perhaps incompletely) filled by
?OBJ, i.e. some part of ?HOLE is perfectly filled by ?OBJ.  Note that
&%properlyFills is the dual of &%completelyFills, and is so
related to &%partiallyFills that ?OBJ &%properlyFills ?HOLE just in
case ?OBJ &%partiallyFills every part of ?HOLE.  (Thus, every perfect
filler is both complete and proper in this sense).")

(=>
	(properlyFills ?OBJ ?HOLE1)
	(exists (?HOLE2)
		(and
			(part ?HOLE2 ?HOLE1)
			(fills ?OBJ ?HOLE2))))

(instance completelyFills AsymmetricRelation)
(subrelation completelyFills partiallyFills)
(documentation completelyFills "(&%completelyFills ?OBJ ?HOLE)
means that some &%part of the &%Object ?OBJ fills the &%Hole ?HOLE.
Note that if (&%completelyFills ?OBJ1 ?HOLE) and (&%part
?OBJ1 ?OBJ2), then (&%completelyFills ?OBJ2 ?HOLE).")

(=>
	(completelyFills ?OBJ1 ?HOLE)
	(exists (?OBJ2)
		(and
			(part ?OBJ2 ?OBJ1)
			(fills ?OBJ2 ?HOLE))))

(instance fills AsymmetricRelation)
(subrelation fills completelyFills)
(subrelation fills properlyFills)
(domain fills 1 Object)
(domain fills 2 Hole)
(relatedInternalConcept fills Fillable)
(documentation fills "Holes can be filled.  (&%fills ?OBJ ?HOLE)
means that the &%Object ?OBJ fills the &%Hole ?HOLE.  Note that
&%fills here means perfectly filled.")

;; Perfect fillers and fillable entities have no parts in common (rather,
;; they may occupy the same spatial region).

(=>
	(and
		(fills ?OBJ1 ?HOLE)
           	(attribute ?OBJ2 Fillable))
      (not
		(overlapsSpatially ?OBJ1 ?OBJ2)))

;; A complete filler of (a part of) a hole is connected with everything
;; with which (that part of) the hole itself is connected.

(=>
   (completelyFills ?OBJ1 ?HOLE)
      (forall (?OBJ2)
   	   (=>
	      (connected ?OBJ2 ?HOLE)
            (connected ?OBJ2 ?OBJ1))))

;; Every hole is connected with everything with which a proper filler
;; of the hole is connected.

(=>
	(and
		(properlyFills ?OBJ1 ?HOLE)
          	(connected ?OBJ2 ?OBJ1))
     	(connected ?HOLE ?OBJ2))

;; A perfect filler of (a part of) a hole completely fills every proper
;; part of (that part of) that hole.

(=>
	(and
		(fills ?OBJ ?HOLE1)
            (properPart ?HOLE2 ?HOLE1))
     	(completelyFills ?OBJ ?HOLE2))

;; Every proper part of a perfect filler of (a part of) a hole properly
;; fills (that part of) that hole.

(=>
	(and
		(fills ?OBJ1 ?HOLE)
            (properPart ?OBJ2 ?OBJ1))
     	(properlyFills ?OBJ2 ?HOLE))

(instance SkinFn SpatialRelation)
(instance SkinFn UnaryFunction)
(instance SkinFn TotalValuedRelation)
(instance SkinFn AsymmetricRelation)
(domain SkinFn 1 Hole)
(range SkinFn Object)
(documentation SkinFn "A &%UnaryFunction that maps a &%Hole to the skin
of the &%Hole.  The skin of a &%Hole is the fusion of those superficial
parts (see &%superficialPart) of the &%Hole's principal host (see
&%PrincipalHostFn) with which the &%Hole is externally connected.")

(=>
     (equal ?OBJ1 (SkinFn ?HOLE))
     (forall (?OBJ2)
		(<=>
			(overlapsSpatially ?OBJ2 ?OBJ1)
			(exists (?OBJ3)
				(and
				      (superficialPart ?OBJ3 (PrincipalHostFn ?HOLE))
				      (meetsSpatially ?HOLE ?OBJ3)
				      (overlapsSpatially ?OBJ2 ?OBJ3))))))

;; END FILE

;; <module>PROCESSES</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;;;
;;    PROCESSES    ;;
;;;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'TEMPORAL CONCEPTS'
;; INCLUDES 'OBJECTS'
;; INCLUDES 'QUALITIES'

(instance subProcess BinaryPredicate)
(instance subProcess PartialOrderingRelation)
(domain subProcess 1 Process)
(domain subProcess 2 Process)
(documentation subProcess "(&%subProcess ?SUBPROC ?PROC) means that ?SUBPROC
is a subprocess of ?PROC.  A subprocess is here understood as a temporally
distinguished part (proper or not) of a &%Process.")

(=>
   (subProcess ?SUBPROC ?PROC)
      (or
         (equal (WhenFn ?SUBPROC) (WhenFn ?PROC))
         (during (WhenFn ?SUBPROC) (WhenFn ?PROC))))

(=>
   (subProcess ?SUBPROC ?PROC)
   (forall (?REGION)
      (=>
         (located ?PROC ?REGION)
         (located ?SUBPROC ?REGION))))

;; Each temporal part of a Process exists at some timepoint.

(=>
	(and
            (instance ?PROC Process)
            (subProcess ?SUBPROC ?PROC))
     	(exists (?TIME)
      	    (time ?SUBPROC ?TIME)))

;; The following formulas cover the hierarchy of &%Classes under
;; &%BiologicalProcess.

(subclass BiologicalProcess InternalChange)
(documentation BiologicalProcess "A &%Process embodied in an &%Organism.")

(=>
   (instance ?PROC BiologicalProcess)
   (exists (?OBJ)
      (and
         (instance ?OBJ Organism)
         (located ?PROC ?OBJ))))

(=>
   (and
      (instance ?PROC BiologicalProcess)
      (experiencer ?PROC ?ORG))
   (instance ?ORG Organism))

(subclass PhysiologicProcess BiologicalProcess)
(documentation PhysiologicProcess "A normal process of an &%Organism
or part of an &%Organism.")

(subclass AutonomicProcess BiologicalProcess)
(disjoint AutonomicProcess IntentionalProcess)
(documentation AutonomicProcess "The class of &%BiologicalProcesses of
which there is not conscious awareness and control.")

(=>
   (and
      (instance ?PROCESS AutonomicProcess)
      (agent ?PROCESS ?AGENT))
   (instance ?AGENT Hypothalamus))

(subclass OrganismProcess PhysiologicProcess)
(documentation OrganismProcess "A physiologic function of the
&%Organism as a whole, of multiple organ systems or of multiple
&%Organs or &%Tissues.")

(subclass Birth OrganismProcess)
(documentation Birth "The &%Process of being born.")

(=>
   (and
      (instance ?BIRTH Birth)
      (experiencer ?BIRTH ?AGENT))
   (exists (?DEATH)
      (and
         (instance ?DEATH Death)
         (experiencer ?DEATH ?AGENT))))

(subclass Death OrganismProcess)
(documentation Death "The &%Process of dying.")

(=>
   (and
      (instance ?DEATH Death)
      (experiencer ?DEATH ?AGENT))
   (holdsDuring (FutureFn (WhenFn ?DEATH)) (attribute ?AGENT Dead)))

(=>
   (and
      (instance ?DEATH Death)
      (instance ?BIRTH Birth)
      (experiencer ?DEATH ?AGENT)
      (experiencer ?BIRTH ?AGENT))
   (exists (?TIME)
      (and
         (meetsTemporally (WhenFn ?BIRTH) ?TIME)
         (meetsTemporally ?TIME (WhenFn ?DEATH))
         (holdsDuring ?TIME (attribute ?AGENT Living)))))

(subclass Breathing OrganismProcess)
(documentation Breathing "The &%Process of respiration, by which oxygen
is made available to an &%Animal.  This covers processes of inhalation,
exhalation, and alternations between the two.")

(subclass Ingesting OrganismProcess)
(documentation Ingesting "The &%Process by which &%Food is
taken into an &%Animal.")

(=>
   (and
      (instance ?ACT Ingesting)
      (patient ?ACT ?FOOD))
   (instance ?FOOD Food))

(subclass Eating Ingesting)
(documentation Eating "The &%Process by which solid &%Food is
incorporated into an &%Animal.")

(=>
   (and
      (instance ?ACT Eating)
      (patient ?ACT ?FOOD))
   (attribute ?FOOD Solid))

(subclass Drinking Ingesting)
(documentation Drinking "The &%Process by which liquid &%Food, i.e.
&%Beverages, are incorporated into an &%Animal.")

(subclass Digesting OrganismProcess)
(documentation Digesting "The &%Process by which &%Food that has been
ingested is broken down into simpler chemical compounds and absorbed by
the &%Organism.")

(=>
   (and
      (instance ?DIGEST Digesting)
      (agent ?DIGEST ?ORGANISM))
   (exists (?INGEST)
      (and
         (instance ?INGEST Ingesting)
         (agent ?INGEST ?ORGANISM)
         (overlapsTemporally (WhenFn ?INGEST) (WhenFn ?DIGEST)))))

(=>
   (instance ?DIGEST Digesting)
   (exists (?DECOMP)
      (and
         (instance ?DECOMP ChemicalDecomposition)
         (subProcess ?DECOMP ?DIGEST))))

(subclass Growth OrganismProcess)
(documentation Growth "The &%Process of biological development in which
an &%Organism or part of an &%Organism changes its form or its size.")

(subclass Replication OrganismProcess)
(documentation Replication "The &%Process of biological reproduction.
This can be either a sexual or an asexual process.")

(=>
   (and
      (instance ?REP Replication)
      (agent ?REP ?PARENT)
      (result ?REP ?CHILD))
   (parent ?CHILD ?PARENT))

(=>
   (instance ?REP Replication)
   (exists (?BODY)
      (and
         (instance ?BODY ReproductiveBody)
         (result ?REP ?BODY))))

(subclass SexualReproduction Replication)
(disjoint SexualReproduction AsexualReproduction)
(documentation SexualReproduction "Sexual &%Processes of biological
reproduction.")

(=>
   (and
      (instance ?REP SexualReproduction)
      (result ?REP ?ORGANISM))
   (exists (?MOTHER ?FATHER)
      (and
         (mother ?ORGANISM ?MOTHER)
         (father ?ORGANISM ?FATHER))))

(subclass AsexualReproduction Replication)
(documentation AsexualReproduction "Asexual &%Processes of biological
reproduction.")

(=>
   (and
      (instance ?REP AsexualReproduction)
      (result ?REP ?ORGANISM))
   (not (exists (?PARENT1 ?PARENT2)
      (and
         (parent ?ORGANISM ?PARENT1)
         (parent ?ORGANISM ?PARENT2)
         (not (equal ?PARENT1 ?PARENT2))))))

(subclass PsychologicalProcess BiologicalProcess)
(documentation PsychologicalProcess "A &%BiologicalProcess which takes place in
the mind or brain of an &%Organism and which may be manifested in the behavior
of the &%Organism.")

(=>
    (instance ?PROCESS PsychologicalProcess)
    (exists (?ANIMAL)
        (and
            (instance ?ANIMAL Animal)
            (experiencer ?PROCESS ?ANIMAL))))

(subclass OrganOrTissueProcess PhysiologicProcess)
(disjoint OrganOrTissueProcess OrganismProcess)
(documentation OrganOrTissueProcess "A &%PhysiologicProcess of a
particular &%Organ or &%Tissue.")

(=>
    (instance ?PROC OrganOrTissueProcess)
    (exists (?THING)
        (and
            (located ?PROC ?THING)
            (or
                (instance ?THING Organ)
                (instance ?THING Tissue)))))

(subclass PathologicProcess BiologicalProcess)
(disjoint PathologicProcess PhysiologicProcess)
(documentation PathologicProcess "A disordered process, activity, or
state of the &%Organism as a whole, of a body system or systems, or of
multiple &%Organs or &%Tissues. Included here are normal responses to a
negative stimulus as well as patholologic conditions or states that are
less specific than a disease. Pathologic functions frequently have
systemic effects.")

(=>
   (and
      (instance ?PATH PathologicProcess)
      (experiencer ?PATH ?ORG))
   (exists (?PART ?DISEASE)
      (and
         (part ?PART ?ORG)
         (instance ?DISEASE DiseaseOrSyndrome)
         (attribute ?PART ?DISEASE))))

(subclass Injuring PathologicProcess)
(subclass Injuring Damaging)
(documentation Injuring "The process of creating a traumatic wound or
injury.  Since &%Injuring is not possible without some biologic function
of the organism being injured, it is a subclass of &%BiologicalProcess.")

(=>
    (instance ?INJ Injuring)
    (exists (?STRUCT)
        (and
            (instance ?STRUCT AnatomicalStructure)
            (patient ?INJ ?STRUCT))))

(<=>
   (instance ?INJ Injuring)
   (and
      (instance ?INJ Damaging)
      (exists (?ORGANISM)
         (and
            (instance ?ORGANISM Organism)
            (patient ?INJ ?ORGANISM)))))

(subclass Poisoning Injuring)
(documentation Poisoning "A &%Poisoning is caused by an external
substance.  Since &%Poisoning is not possible without some biologic
function which affects the &%Organism being injured, it is a subclass
of &%BiologicalProcess.")

(=>
    (instance ?POISON Poisoning)
    (exists (?THING)
        (and
            (patient ?POISON ?THING)
            (or
                (instance ?THING Organism)
                (instance ?THING AnatomicalStructure)))))

(=>
    (instance ?POISON Poisoning)
    (exists (?SUBSTANCE)
        (and
		(instance ?SUBSTANCE BiologicallyActiveSubstance)
            (instrument ?POISON ?SUBSTANCE))))

(subclass IntentionalProcess Process)
(documentation IntentionalProcess "A &%Process that has a specific
purpose for the &%CognitiveAgent who performs it.")

(=>
   (and
      (instance ?PROC IntentionalProcess)
      (agent ?PROC ?AGENT))
   (exists (?PURP)
      (hasPurposeForAgent ?PROC ?PURP ?AGENT)))

(=>
   (instance ?PROC IntentionalProcess)
   (exists (?AGENT)
      (and
         (instance ?AGENT CognitiveAgent)
         (agent ?PROC ?AGENT))))

(=>
   (and
      (instance ?PROC IntentionalProcess)
      (agent ?PROC ?HUMAN)
      (instance ?HUMAN Animal))
   (holdsDuring (WhenFn ?PROC) (attribute ?HUMAN Awake)))

(subclass IntentionalPsychologicalProcess IntentionalProcess)
(subclass IntentionalPsychologicalProcess PsychologicalProcess)
(documentation IntentionalPsychologicalProcess "An &%IntentionalProcess that
can be realized entirely within the mind or brain of an &%Organism.  Thus,
for example, &%Reasoning is a subclass of &%IntentionalPsychologicalProcess,
because one can reason simply by exercising one's mind/brain.  On the other
hand, &%RecreationOrExercise is not a subclass of &%IntentionalPsychologicalProcess,
because many instances of &%RecreationOrExercise necessarily have &%subProcesses
of &%BodyMotion.")

(subclass RecreationOrExercise IntentionalProcess)
(documentation RecreationOrExercise "A &%Process that is carried out for
the purpose of recreation or exercise.  Since &%RecreationOrExercise is a
subclass of &%IntentionalProcess, the intent of a process determines whether
or not it is an instance of the class.  Hence, if John and Bill watch the same
program on television, and John watches it to relax while Bill watches it solely
to satisfy an educational requirement, then John's watching the movie is an
instance of &%RecreationOrExercise, while Bill's is not (both cases of
watching the television program would however be in the class of &%Seeing, since
being an instance of this latter class is not determined by intention).")

(subclass OrganizationalProcess IntentionalProcess)
(documentation OrganizationalProcess "An &%IntentionalProcess that
involves an &%Organization.")

(=>
   (and
      (instance ?ACT OrganizationalProcess)
      (agent ?ACT ?AGENT))
   (or
      (instance ?AGENT Organization)
      (exists (?ORG)
         (and
            (instance ?ORG Organization)
            (member ?AGENT ?ORG)))))

(subclass Election OrganizationalProcess)
(documentation Election "&%Election is the class of events conducted by an
organization, in which qualified participants vote for officers, adopt
resolutions, or settle other issues in that &%Organization.")

(=>
	(and
		(instance ?EVENT Election)
		(agent ?EVENT ?AGENT)
		(instance ?AGENT GeopoliticalArea))
	(instance ?EVENT PoliticalProcess))

(=>
	(and
		(instance ?EVENT Election)
		(agent ?EVENT ?AGENT)
		(instance ?AREA GeopoliticalArea)
		(instance ?AGENT (GovernmentFn ?AREA)))
	(instance ?EVENT PoliticalProcess))

(subclass ReligiousProcess OrganizationalProcess)
(documentation ReligiousProcess "An &%OrganizationalProcess that is
carried out within or by a &%ReligiousOrganization.")

(=>
   (and
      (instance ?ACT ReligiousProcess)
      (agent ?ACT ?AGENT))
   (or
      (instance ?AGENT ReligiousOrganization)
      (exists (?ORG)
         (and
            (member ?AGENT ?ORG)
            (instance ?ORG ReligiousOrganization)))))

(subclass JoiningAnOrganization OrganizationalProcess)
(documentation JoiningAnOrganization "The &%OrganizationalProcess of
becoming a &%member of an &%Organization.")

(=>
   (and
      (instance ?JOIN JoiningAnOrganization)
      (instance ?ORG Organization)
      (agent ?JOIN ?PERSON)
      (patient ?JOIN ?ORG))
   (and
      (holdsDuring (BeginFn (WhenFn ?JOIN)) (not (member ?PERSON ?ORG)))
      (holdsDuring (EndFn (WhenFn ?JOIN)) (member ?PERSON ?ORG))))

(subclass LeavingAnOrganization OrganizationalProcess)
(disjoint LeavingAnOrganization JoiningAnOrganization)
(documentation LeavingAnOrganization "The &%OrganizationalProcess of
leaving an &%Organization, whether voluntarily or involuntarily.")

(=>
   (and
      (instance ?LEAVE LeavingAnOrganization)
      (instance ?ORG Organization)
      (agent ?LEAVE ?PERSON)
      (patient ?LEAVE ?ORG))
   (and
      (holdsDuring (BeginFn (WhenFn ?LEAVE)) (member ?PERSON ?ORG))
      (holdsDuring (EndFn (WhenFn ?LEAVE)) (not (member ?PERSON ?ORG)))))

(subclass Graduation LeavingAnOrganization)
(documentation Graduation "The &%OrganizationalProcess of graduating
from an &%EducationalOrganization.")

(=>
   (and
      (instance ?GRAD Graduation)
      (agent ?GRAD ?ORG)
      (patient ?GRAD ?PERSON))
   (instance ?ORG EducationalOrganization))

(subclass Matriculation JoiningAnOrganization)
(documentation Matriculation "The &%OrganizationalProcess of joining an
&%EducationalOrganization as a student.")

(=>
   (and
      (instance ?MAT Matriculation)
      (agent ?MAT ?ORG)
      (patient ?MAT ?PERSON))
   (instance ?ORG EducationalOrganization))

(subclass Hiring JoiningAnOrganization)
(documentation Hiring "&%OrganizationalProcesses where someone is made an
employee of an &%Organization.")

(=>
   (and
      (instance ?HIRE Hiring)
      (instance ?ORG Organization)
      (agent ?HIRE ?ORG)
      (patient ?HIRE ?PERSON))
   (and
      (holdsDuring (BeginFn (WhenFn ?HIRE)) (not (employs ?ORG ?PERSON)))
      (holdsDuring (EndFn (WhenFn ?HIRE)) (employs ?ORG ?PERSON))))

(subclass TerminatingEmployment LeavingAnOrganization)
(documentation TerminatingEmployment "&%OrganizationalProcesses where someone
ceases to be an employee of an &%Organization.  Note that this covers being
laid off, being fired, and voluntarily leaving a job.")

(=>
   (and
      (instance ?FIRE TerminatingEmployment)
      (instance ?ORG Organization)
      (agent ?FIRE ?ORG)
      (patient ?FIRE ?PERSON))
   (and
      (holdsDuring (BeginFn (WhenFn ?FIRE)) (employs ?ORG ?PERSON))
      (holdsDuring (EndFn (WhenFn ?FIRE)) (not (employs ?ORG ?PERSON)))))

(subclass PoliticalProcess OrganizationalProcess)
(documentation PoliticalProcess "An &%OrganizationalProcess carried
out by, for or against officially constituted governments.  Some examples
would be voting on proposed legislation, electing a government representative,
or even overthrowing a government in a revolution.")

(=>
   (instance ?PROC PoliticalProcess)
   (exists (?POL)
      (and
         (or
            (instance ?POL Government)
            (exists (?GOV)
               (and
                  (instance ?GOV Government)
                  (member ?POL ?GOV))))
         (or
            (agent ?PROC ?POL)
            (patient ?PROC ?POL)))))

(subclass JudicialProcess PoliticalProcess)
(documentation JudicialProcess "Any legal proceeding which is conducted
by a &%JudicialOrganization.  Note that there is an important difference
between the concepts &%LegalAction and &%JudicialProcess.  The former
refers to legal claims that are brought by a plaintiff, e.g. law suits,
while the second refers to trials and other sorts of judicial hearings
where the merits of a &%LegalAction are decided.")

(=>
   (and
      (instance ?PROCESS JudicialProcess)
      (agent ?PROCESS ?ORG)
      (instance ?ORG Organization))
   (instance ?ORG JudicialOrganization))

(subclass MilitaryProcess PoliticalProcess)
(documentation MilitaryProcess "Any &%Process that is carried out by a
military organization.  Note that this class covers &%Processes, e.g.
military operations, that are the result of careful planning, as well as
those which are unscripted.")

(subclass RegulatoryProcess Guiding)
(documentation RegulatoryProcess "an &%Guiding whose aim is the enforcement
of rules or regulations.  Note the key differences between &%RegulatoryProcess
and the related concept &%Managing.  The latter implies a long-term relationship
between a single manager and limited number of agents who are managed, while the
former implies a normative standard to which the activities of the regulated are
referred.")

(subclass Managing OrganizationalProcess)
(subclass Managing Guiding)
(documentation Managing "&%OrganizationalProcesses that involve overseeing
the activities of others.  Note the key differences between &%RegulatoryProcess
and its sibling &%Managing.  The latter implies a long-term relationship between
the manager and the managed, while the former implies a normative standard to which
the activities of the regulated are referred.")

(subclass Planning IntentionalPsychologicalProcess)
(documentation Planning "Specifying a set of actions in order to meet a
set of goals or objectives.")

(subclass Designing IntentionalPsychologicalProcess)
(documentation Designing "The spatial analogue of &%Planning.  &%Designing a
&%Collection of &%Objects involves determining a placement of the &%Objects
with respect to one another and perhaps other &%Objects as well, in order to
satisfy a particular purpose.")

(subclass Interpreting IntentionalPsychologicalProcess)
(documentation Interpreting "Any &%Process of assigning a &%Proposition to
a &%Text, i.e. understanding the &%Text.")

(=>
   (and
      (instance ?INTERPRET Interpreting)
      (agent ?INTERPRET ?AGENT)
      (patient ?INTERPRET ?CONTENT)
      (instance ?CONTENT ContentBearingObject))
   (exists (?PROP)
      (holdsDuring (EndFn (WhenFn ?INTERPRET)) (believes ?AGENT (containsInformation ?CONTENT ?PROP)))))

(subclass QuantityChange InternalChange)
(partition QuantityChange Increasing Decreasing)
(documentation QuantityChange "Any &%InternalChange where a &%PhysicalQuantity
associated with the &%patient is altered.")

(subclass Increasing QuantityChange)
(relatedInternalConcept Increasing Putting)
(documentation Increasing "Any &%QuantityChange where the &%PhysicalQuantity
is increased.")

(=>
   (and
      (instance ?INCREASE Increasing)
      (patient ?INCREASE ?OBJ))
   (exists (?UNIT ?QUANT1 ?QUANT2)
   	(and
         (holdsDuring (BeginFn (WhenFn ?INCREASE)) (equal (MeasureFn ?OBJ ?UNIT) ?QUANT1))
	   (holdsDuring (EndFn (WhenFn ?INCREASE)) (equal (MeasureFn ?OBJ ?UNIT) ?QUANT2))
	   (greaterThan ?QUANT2 ?QUANT1))))

(subclass Heating Increasing)
(disjoint Heating Cooling)
(documentation Heating "Any &%Increasing &%Process where the &%PhysicalQuantity
increased is a &%TemperatureMeasure.")

(=>
   (and
      (instance ?HEAT Heating)
      (patient ?HEAT ?OBJ))
   (exists (?UNIT ?QUANT1 ?QUANT2)
   	(and
         (instance ?UNIT TemperatureMeasure)
         (holdsDuring (BeginFn (WhenFn ?HEAT)) (equal (MeasureFn ?OBJ ?UNIT) ?QUANT1))
	   (holdsDuring (EndFn (WhenFn ?HEAT)) (equal (MeasureFn ?OBJ ?UNIT) ?QUANT2))
	   (greaterThan ?QUANT2 ?QUANT1))))

(subclass Decreasing QuantityChange)
(relatedInternalConcept Decreasing Removing)
(documentation Decreasing "Any &%QuantityChange where the &%PhysicalQuantity
is decreased.")

(=>
   (and
      (instance ?DECREASE Decreasing)
      (patient ?DECREASE ?OBJ))
   (exists (?UNIT ?QUANT1 ?QUANT2)
   	(and
         (holdsDuring (BeginFn (WhenFn ?DECREASE)) (equal (MeasureFn ?OBJ ?UNIT) ?QUANT1))
	   (holdsDuring (EndFn (WhenFn ?DECREASE)) (equal (MeasureFn ?OBJ ?UNIT) ?QUANT2))
	   (lessThan ?QUANT2 ?QUANT1))))

(subclass Cooling Decreasing)
(documentation Cooling "Any &%Decreasing &%Process where the &%PhysicalQuantity
decreased is a &%TemperatureMeasure.")

(=>
   (and
      (instance ?COOL Cooling)
      (patient ?COOL ?OBJ))
   (exists (?UNIT ?QUANT1 ?QUANT2)
   	(and
         (instance ?UNIT TemperatureMeasure)
         (holdsDuring (BeginFn (WhenFn ?COOL)) (equal (MeasureFn ?OBJ ?UNIT) ?QUANT1))
	   (holdsDuring (EndFn (WhenFn ?COOL)) (equal (MeasureFn ?OBJ ?UNIT) ?QUANT2))
	   (lessThan ?QUANT2 ?QUANT1))))

(subclass Motion Process)
(documentation Motion "Any &%Process of movement.")

(=>
   (and
      (instance ?MOTION Motion)
      (patient ?MOTION ?OBJ)
      (origin ?MOTION ?PLACE))
   (holdsDuring (BeginFn (WhenFn ?MOTION)) (located ?OBJ ?PLACE)))

(=>
   (and
      (instance ?MOTION Motion)
      (patient ?MOTION ?OBJ)
      (destination ?MOTION ?PLACE))
   (holdsDuring (EndFn (WhenFn ?MOTION)) (located ?OBJ ?PLACE)))

(instance path CaseRole)
(domain path 1 Motion)
(domain path 2 Object)
(documentation path "(&%path ?MOTION ?PATH) means that ?PATH is a route
along which ?MOTION occurs.  For example, Highway 101 is the path in the
following proposition:  the car drove up Highway 101.")

(=>
   (and
      (path ?PROCESS ?PATH1)
      (origin ?PROCESS ?SOURCE)
      (destination ?PROCESS ?DEST)
      (length ?PATH1 ?MEASURE1)
      (distance ?SOURCE ?DEST ?DISTANCE)
      (not (greaterThan ?MEASURE1 ?DISTANCE)))
   (forall (?OBJ)
      (=>
         (part ?OBJ ?PATH1)
         (between ?SOURCE ?OBJ ?DEST))))

(subclass BodyMotion Motion)
(documentation BodyMotion "Any &%Motion where the &%agent is an &%Organism
and the &%patient is a &%BodyPart.")

(=>
   (instance ?MOTION BodyMotion)
   (exists (?OBJ ?AGENT)
      (and
         (instance ?OBJ BodyPart)
         (patient ?MOTION ?OBJ)
         (instance ?AGENT Organism)
         (agent ?MOTION ?AGENT))))

(subclass Vocalizing RadiatingSound)
(subclass Vocalizing BodyMotion)
(documentation Vocalizing "Any instance of &%RadiatingSound where the
&%instrument is the &%Human vocal cords.  This covers grunts, screams,
roars, as well as &%Speaking.")

(=>
   (instance ?VOCAL Vocalizing)
   (exists (?HUMAN)
      (and
         (instance ?HUMAN Human)
         (agent ?VOCAL ?HUMAN)
         (instrument ?VOCAL ?HUMAN))))

(subclass Speaking LinguisticCommunication)
(subclass Speaking Vocalizing)
(documentation Speaking "Any &%LinguisticGeneration which is also a
&%Vocalizing, i.e. any &%LinguisticCommunication by a &%Human which
involves his/her vocal cords.")

(subclass Singing Speaking)
(subclass Singing Music)
(documentation Singing "&%Speaking that is also &%Music.")

(subclass Ambulating BodyMotion)
(subclass Ambulating Translocation)
(partition Ambulating Walking Running)
(documentation Ambulating "Any &%BodyMotion which is accomplished by
means of the legs of an &%Animal for the purpose of moving from one
point to another.")

(subclass Walking Ambulating)
(documentation Walking "&%Ambulating relatively slowly, i.e. moving in such a way that at least one foot is always in contact with the ground.")

(subclass Running Ambulating)
(documentation Running "&%Ambulating relatively quickly, i.e. moving in such a way that, with each step, neither foot is in contact with the ground for a period of time.")

(=>
   (and
      (instance ?WALK Walking)
      (instance ?RUN Running)
      (agent ?WALK ?AGENT)
      (agent ?RUN ?AGENT)
      (holdsDuring (WhenFn ?WALK) (measure ?AGENT (SpeedFn ?LENGTH1 ?TIME)))
      (holdsDuring (WhenFn ?RUN) (measure ?AGENT (SpeedFn ?LENGTH2 ?TIME))))
   (greaterThan ?LENGTH2 ?LENGTH1))

(subclass Swimming BodyMotion)
(documentation Swimming "Any deliberate and controlled &%BodyMotion
through water that is accomplished by an &%Organism.")

(=>
   (and
      (instance ?SWIM Swimming)
      (agent ?SWIM ?AGENT))
   (exists (?AREA)
      (and
         (instance ?AREA WaterArea)
         (located ?AGENT ?AREA))))

(subclass Dancing BodyMotion)
(documentation Dancing "Any &%BodyMotion of &%Humans which is
deliberately coordinated with music.")

;; SUMO Mid-Level uses this rather than the disjoint
;;   proposition.  For simplicity, we leave in the
;;   disjopint proposition -- PJC 01-19-04
;;(subclass GeologicalProcess (ComplementFn IntentionalProcess))

(subclass GeologicalProcess Motion)
(disjoint GeologicalProcess IntentionalProcess)
(documentation GeologicalProcess "The class of activities that
are caused by geological forces and affect geological features,
and which may affect the biosphere as well.")

(subclass DirectionChange Motion)
(documentation DirectionChange "The act of changing the direction in
which the &%patient of the act is oriented.")

(=>
   (instance ?PROC DirectionChange)
   (exists (?ATTR)
      (and
         (instance ?ATTR DirectionalAttribute)
         (or
            (and
               (holdsDuring (BeginFn (WhenFn ?PROC)) (manner ?PROC ?ATTR))
               (holdsDuring (EndFn (WhenFn ?PROC)) (not (manner ?PROC ?ATTR))))
            (and
               (holdsDuring (EndFn (WhenFn ?PROC)) (manner ?PROC ?ATTR))
               (holdsDuring (BeginFn (WhenFn ?PROC)) (not (manner ?PROC ?ATTR))))))))

(subclass Transfer Translocation)
(documentation Transfer "Any &%instance of &%Translocation where the &%agent
and the &%patient are not the same thing.")

(=>
   (and
      (instance ?TRANSFER Transfer)
      (agent ?TRANSFER ?AGENT)
      (patient ?TRANSFER ?PATIENT))
   (not
      (equal ?AGENT ?PATIENT)))

(subclass Carrying Transfer)
(documentation Carrying "&%Transfer from one point to another by means of
an &%Animal or &%Human.")

(=>
   (instance ?CARRY Carrying)
   (exists (?ANIMAL)
      (and
         (instance ?ANIMAL Animal)
         (instrument ?TRANS ?ANIMAL))))

(subclass Removing Transfer)
(documentation Removing "The &%Class of &%Processes where something is
taken away from a location.  Note that the thing removed and the location
are specified with the &%CaseRoles &%patient and &%origin, respectively.")

(=>
   (and
      (instance ?REMOVE Removing)
      (origin ?REMOVE ?PLACE)
      (patient ?REMOVE ?OBJ))
   (and
      (holdsDuring (BeginFn (WhenFn ?REMOVE)) (located ?OBJ ?PLACE))
      (holdsDuring (EndFn (WhenFn ?REMOVE)) (not (located ?OBJ ?PLACE)))))

(subclass Uncovering Removing)
(disjoint Uncovering Covering)
(documentation Uncovering "The &%Class of &%Removing processes where the &%agent
uncovers the &%patient, either completely or only partially.")

(subclass Putting Transfer)
(documentation Putting "The &%Class of &%Processes where something is put
in a location.  Note that the location is specified with the &%CaseRole
&%destination.")

(=>
   (and
      (instance ?PUT Putting)
      (destination ?PUT ?PLACE)
      (patient ?PUT ?OBJ))
   (and
      (holdsDuring (BeginFn (WhenFn ?PUT)) (not (located ?OBJ ?PLACE)))
      (holdsDuring (EndFn (WhenFn ?PUT)) (located ?OBJ ?PLACE))))

(subclass Covering Putting)
(documentation Covering "The &%Class of &%Putting processes where the &%agent
covers the &%patient, either completely or only partially, with something
else.")

(subclass Dressing Putting)
(subclass Dressing Covering)
(documentation Dressing "The &%Process of putting on &%Clothing.")

(=>
   (and
      (instance ?DRESS Dressing)
      (agent ?DRESS ?AGENT)
      (patient ?DRESS ?CLOTHING))
   (and
      (instance ?CLOTHING Clothing)
      (holdsDuring (BeginFn (WhenFn ?DRESS)) (not (wears ?AGENT ?CLOTHING)))
      (holdsDuring (EndFn (WhenFn ?DRESS)) (wears ?AGENT ?CLOTHING))))

(subclass Inserting Putting)
(documentation Inserting "&%Putting one thing inside of another thing.")

(=>
   (and
      (instance ?INSERT Inserting)
      (patient ?INSERT ?OBJ1)
      (destination ?INSERT ?OBJ2))
   (and
      (holdsDuring (BeginFn (WhenFn ?INSERT)) (not (contains ?OBJ2 ?OBJ1)))
      (holdsDuring (EndFn (WhenFn ?INSERT)) (contains ?OBJ2 ?OBJ1))))

(subclass Injecting Inserting)
(documentation Injecting "&%Inserting a &%BiologicallyActiveSubstance into an &%Animal or a &%Human with a syringe.")

(=>
   (instance ?INJECT Injecting)
   (exists (?SUBSTANCE ?ANIMAL)
      (and
         (patient ?INJECT ?SUBSTANCE)
         (instance ?SUBSTANCE BiologicallyActiveSubstance)
         (attribute ?SUBSTANCE Liquid)
         (destination ?INJECT ?ANIMAL)
         (instance ?ANIMAL Animal))))

(subclass Substituting Transfer)
(subclass Substituting DualObjectProcess)
(documentation Substituting "The &%Class of &%Transfers where one thing is
replaced with something else.")

(=>
   (instance ?SUB Substituting)
   (exists (?PUT ?REMOVE ?OBJ1 ?OBJ2 ?PLACE)
      (and
         (instance ?PUT Putting)
         (instance ?REMOVE Removing)
         (subProcess ?PUT ?SUB)
         (subProcess ?REMOVE ?SUB)
         (patient ?REMOVE ?OBJ1)
         (origin ?REMOVE ?PLACE)
         (patient ?PUT ?OBJ2)
         (destination ?PUT ?PLACE)
         (not (equal ?OBJ1 ?OBJ2)))))

(subclass Impelling Transfer)
(documentation Impelling "The &%subclass of &%Transfer where the &%patient
travels through space by means of a sudden, forceful event.  Some examples
would be shooting, throwing, tossing, etc.")

(subclass Shooting Impelling)
(documentation Shooting "The &%subclass of &%Impelling where the &%patient
is a projectile that is fired through the air by means of some sort of
&%Device.")

(subclass Touching Transfer)
(documentation Touching "Any &%Transfer where two &%Objects are
brought into immediate physical contact with one another.")

(=>
   (and
      (instance ?TOUCH Touching)
      (agent ?TOUCH ?OBJ1)
      (patient ?TOUCH ?OBJ2))
   (and
      (holdsDuring (BeginFn (WhenFn ?TOUCH)) (not (connected ?OBJ1 ?OBJ2)))
      (holdsDuring (EndFn (WhenFn ?TOUCH)) (connected ?OBJ1 ?OBJ2))))

(subrelation grasps meetsSpatially)
(domain grasps 1 Animal)
(domain grasps 2 Object)
(documentation grasps "The state of grasping an &%Object.  (&%grasps
?ANIMAL ?OBJ) means that the &%Animal ?ANIMAL is intentionally holding
on to the &%Object ?OBJ.")

(subclass Grabbing Touching)
(documentation Grabbing "Any instance of &%Touching which results in
a situation where the &%agent &%grasps the &%patient of the &%Touching.")

(=>
   (and
      (instance ?GRAB Grabbing)
      (agent ?GRAB ?AGENT)
      (patient ?GRAB ?THING))
   (and
      (holdsDuring (BeginFn (WhenFn ?GRAB)) (not (grasps ?AGENT ?THING)))
      (holdsDuring (EndFn (WhenFn ?GRAB)) (grasps ?AGENT ?THING))))

(subclass Releasing Transfer)
(documentation Releasing "Any instance of &%Transfer which results in
a situation where it is not the case that the &%agent &%grasps something
which he/she &%grasps previously.")

(=>
   (and
      (instance ?RELEASE Releasing)
      (agent ?GRAB ?AGENT)
      (patient ?GRAB ?THING))
   (and
      (holdsDuring (BeginFn (WhenFn ?RELEASE)) (grasps ?AGENT ?THING))
      (holdsDuring (EndFn (WhenFn ?RELEASE)) (not (grasps ?AGENT ?THING)))))

(subclass Impacting Touching)
(documentation Impacting "Any &%Touching where something comes into
sudden, forceful, physical contact with something else.  Some examples
would be striking, knocking, whipping etc.")

(=>
   (and
      (instance ?IMPACT Impacting)
      (patient ?IMPACT ?OBJ))
   (exists (?IMPEL)
      (and
         (instance ?IMPEL Impelling)
         (patient ?IMPEL ?OBJ)
         (earlier (WhenFn ?IMPEL) (WhenFn ?IMPACT)))))

(subclass Translocation Motion)
(documentation Translocation "&%Translocation is that class of &%Motions
in which an object moves from one place to another.  In the case of round
trips, the &%origin and &%destination are the same, but the intervening
motion passes through other locations.  &%Translocation represents linear
motion, in contrast to rotation or other movement in place.  A vehicle is
not necessary; &%Ambulating is a kind of &%Translocation.")

(=>
	(and
		(instance ?MOVEMENT Translocation)
		(origin ?MOVEMENT ?PLACE1))
	(exists (?PLACE2 ?STAGE)
		(and
			(instance ?PLACE2 Region)
			(not (equal ?PLACE1 ?PLACE2))
			(subProcess ?STAGE ?MOVEMENT)
			(located ?STAGE ?PLACE2))))

(subclass Transportation Translocation)
(relatedInternalConcept Transportation TransportationDevice)
(documentation Transportation "&%Motion from one point to another by means
of a &%TransportationDevice.")

(=>
   (instance ?TRANS Transportation)
   (exists (?DEVICE)
      (and
         (instance ?DEVICE TransportationDevice)
         (instrument ?TRANS ?DEVICE))))

(subclass Guiding IntentionalProcess)
(documentation Guiding "Any &%IntentionalProcess where the &%agent tries to
direct the movements of another &%Object, whether an &%Agent or not.")

(subclass Steering Guiding)
(documentation Steering "Controlling the direction and/or speed of a
&%TransportationDevice.  This includes navigating a ship, driving a car
or truck, operating a train, etc.")

(=>
   (instance ?STEER Steering)
   (exists (?VEHICLE)
      (and
         (instance ?VEHICLE TransportationDevice)
         (patient ?STEER ?VEHICLE))))

(subclass EducationalProcess Guiding)
(documentation EducationalProcess "Any &%Process which is intended to result
in &%Learning.")

(=>
   (and
      (instance ?EDUCATION EducationalProcess)
      (patient ?EDUCATION ?PERSON))
   (hasPurpose ?EDUCATION (exists (?LEARN)
                             (and
                                (instance ?LEARN Learning)
                                (patient ?LEARN ?PERSON)))))

(subclass ChangeOfPossession SocialInteraction)
(relatedInternalConcept ChangeOfPossession possesses)
(documentation ChangeOfPossession "The &%Class of &%Processes where
ownership of something is transferred from one &%Agent to another.")

(=>
   (and
      (instance ?CHANGE ChangeOfPossession)
      (patient ?CHANGE ?OBJ)
      (holdsDuring (BeginFn (WhenFn ?CHANGE)) (possesses ?AGENT1 ?OBJ))
      (holdsDuring (EndFn (WhenFn ?CHANGE)) (possesses ?AGENT2 ?OBJ)))
   (not
      (equal ?AGENT1 ?AGENT2)))

(=>
   (and
      (instance ?CHANGE ChangeOfPossession)
      (origin ?CHANGE ?AGENT1)
      (destination ?CHANGE ?AGENT2)
      (instance ?AGENT1 Agent)
      (instance ?AGENT2 Agent)
      (patient ?CHANGE ?OBJ))
   (and
      (holdsDuring (BeginFn (WhenFn ?CHANGE)) (possesses ?AGENT1 ?OBJ))
      (holdsDuring (EndFn (WhenFn ?CHANGE)) (possesses ?AGENT2 ?OBJ))))

(subclass Giving ChangeOfPossession)
(documentation Giving "The &%subclass of &%ChangeOfPossession where the
&%agent gives the &%destination something.")

(=>
   (and
      (instance ?GIVE Giving)
      (agent ?GIVE ?AGENT1)
      (destination ?GIVE ?AGENT2)
      (instance ?AGENT2 Agent)
      (patient ?GIVE ?OBJ))
   (exists (?GET)
      (and
         (instance ?GET Getting)
         (agent ?GET ?AGENT2)
         (origin ?GET ?AGENT1)
         (patient ?GET ?OBJ))))

(=>
   (and
      (instance ?GIVE Giving)
      (agent ?GIVE ?AGENT))
   (origin ?GIVE ?AGENT))

(subclass Funding Giving)
(documentation Funding "Any instance of &%Giving where the &%patient is an
instance of &%Currency.  Note that this class covers both
&%FinancialTransactions, e.g. where a firm funds a software company with
venture capital with the agreement that a certain percentage of the profits
on the investment will be returned to the firm, and instances of
&%UnilateralGiving, e.g. a stipend provided to a student as part of
scholarship or fellowship.")

(=>
   (instance ?FUND Funding)
   (exists (?MONEY)
      (and
         (instance ?MONEY Currency)
         (patient ?FUND ?MONEY))))

(subclass UnilateralGiving Giving)
(documentation UnilateralGiving "Any instance of &%Giving that is not part
of a &%Transaction.  In other words, any instance of &%Giving where nothing
is received in return.  Some examples of &%UnilateralGiving are:  honorary
awards, gifts, and financial grants.")

(=>
   (instance ?GIVE UnilateralGiving)
   (not
      (exists (?TRANS)
         (and
            (instance ?TRANS Transaction)
            (subProcess ?GIVE ?TRANS)))))

(subclass Lending Giving)
(documentation Lending "The &%subclass of &%Giving &%Processes where
the &%agent gives the &%destination something for a limited period of
time with the expectation that it will be returned later (perhaps with
interest).")

(<=>
   (exists (?BORROW)
      (and
         (instance ?BORROW Borrowing)
         (agent ?BORROW ?AGENT1)
         (origin ?BORROW ?AGENT2)
         (patient ?BORROW ?OBJECT)))
   (exists (?LEND)
      (and
         (instance ?LEND Lending)
         (agent ?LEND ?AGENT2)
         (destination ?LEND ?AGENT1)
         (patient ?LEND ?OBJECT))))

(subclass GivingBack Giving)
(documentation GivingBack "Any instance of &%Giving where the &%agent gives
something to the &%destination which was previously given to the &%agent by
the &%destination, e.g. returing a book that was borrowed from someone.")

(=>
   (and
      (instance ?RETURN GivingBack)
      (agent ?RETURN ?AGENT)
      (destination ?RETURN ?DEST))
   (exists (?GIVE)
      (and
         (instance ?GIVE Giving)
         (agent ?GIVE ?DEST)
         (destination ?GIVE ?AGENT)
         (earlier (WhenFn ?GIVE) (WhenFn ?RETURN)))))

(subclass Getting ChangeOfPossession)
(documentation Getting "The &%subclass of &%ChangeOfPossession where the
&%agent gets something.  Note that the source from which something is
obtained is specified with the &%origin &%CaseRole.")

(=>
   (and
      (instance ?GET Getting)
      (agent ?GET ?AGENT))
   (destination ?GET ?AGENT))

(subclass UnilateralGetting Getting)
(relatedInternalConcept UnilateralGetting UnilateralGiving)
(documentation UnilateralGetting "Any instance of &%Getting that is not part
of a &%Transaction.  In other words, any instance of &%Getting where nothing
is given in return.  Some examples of &%UnilateralGetting are:  appropriating,
commandeering, stealing, etc.")

(=>
   (instance ?GET UnilateralGetting)
   (not
      (exists (?TRANS)
         (and
            (instance ?TRANS Transaction)
            (subProcess ?GET ?TRANS)))))

(subclass Borrowing Getting)
(documentation Borrowing "The &%subclass of &%Getting &%Processes where
the &%agent gets something for a limited period of time with the expectation
that it will be returned later (perhaps with interest).")

(subclass Transaction ChangeOfPossession)
(subclass Transaction DualObjectProcess)
(documentation Transaction "The &%subclass of &%ChangeOfPossession where
something is exchanged for something else.")

(=>
   (instance ?TRANS Transaction)
   (exists (?AGENT1 ?AGENT2 ?GIVE1 ?GIVE2 ?OBJ1 ?OBJ2)
      (and
         (instance ?GIVE1 Giving)
         (instance ?GIVE2 Giving)
	   (subProcess ?GIVE1 ?TRANS)
   	   (subProcess ?GIVE2 ?TRANS)
         (agent ?GIVE1 ?AGENT1)
         (agent ?GIVE2 ?AGENT2)
         (patient ?GIVE1 ?OBJ1)
         (patient ?GIVE2 ?OBJ2)
         (destination ?GIVE1 ?AGENT2)
         (destination ?GIVE2 ?AGENT1)
         (not
            (equal ?AGENT1 ?AGENT2))
         (not
            (equal ?OBJ1 ?OBJ2)))))

(subclass FinancialTransaction Transaction)
(documentation FinancialTransaction "A &%Transaction where an instance
of &%CurrencyMeasure is exchanged for something else.")

(=>
   (instance ?TRANS FinancialTransaction)
   (exists (?OBJ)
      (and
         (patient ?TRANS ?OBJ)
         (instance ?OBJ CurrencyMeasure))))

(instance transactionAmount BinaryPredicate)
(instance transactionAmount SingleValuedRelation)
(instance transactionAmount TotalValuedRelation)
(domain transactionAmount 1 FinancialTransaction)
(domain transactionAmount 2 CurrencyMeasure)
(documentation transactionAmount "(&%transactionAmount ?TRANSACTION
?AMOUNT) means that ?AMOUNT is an instance of &%CurrencyMeasure being
exhanged in the &%FinancialTransaction ?TRANSACTION.")

(=>
   (transactionAmount ?TRANS ?AMOUNT)
   (exists (?OBJ)
      (and
         (patient ?TRANS ?OBJ)
         (monetaryValue ?OBJ ?AMOUNT))))

(subclass CommercialService FinancialTransaction)
(documentation CommercialService "Any &%FinancialTransaction by a
&%Corporation where the aim is to produce a &%profit.")

(=>
   (instance ?BUSINESS CommercialService)
   (hasPurpose ?BUSINESS
      (exists (?PROFIT)
         (profit ?BUSINESS ?PROFIT))))

(=>
	(instance ?Service CommercialService)
	(exists (?Org ?Agent)
            (and
			(instance ?Org Corporation)
                  (employs ?Org ?Agent)
			(agent ?Service ?Agent))))

;; NOTE THAT the axiom below was changed from the original to
;; use CommercialAgent rather than Corporation as the 
;; Agent

(=>
   (instance ?BUSINESS CommercialService)
   (exists (?AGENT)
      (and
         (instance ?AGENT CommercialAgent)
         (agent ?BUSINESS ?AGENT))))

(subclass Betting FinancialTransaction)
(documentation Betting "A &%FinancialTransaction where an instance of
&%CurrencyMeasure is exchanged for the possibility of winning a larger
instance of &%CurrencyMeasure within the context of some sort of
&%Game.")

(subclass Buying FinancialTransaction)
(relatedInternalConcept Buying Selling)
(documentation Buying "A &%FinancialTransaction in which an instance of
&%CurrencyMeasure is exchanged for an instance of &%Physical.")

(=>
   (and
      (instance ?BUY Buying)
      (agent ?BUY ?AGENT))
   (destination ?BUY ?AGENT))

(subclass Selling FinancialTransaction)
(documentation Selling "A &%FinancialTransaction in which an instance of
&%Physical is exchanged for an instance of &%CurrencyMeasure.")

(<=>
   (exists (?BUY)
      (and
         (instance ?BUY Buying)
         (agent ?BUY ?AGENT1)
         (origin ?BUY ?AGENT2)
         (patient ?BUY ?OBJECT)))
   (exists (?SELL)
      (and
         (instance ?SELL Selling)
         (agent ?SELL ?AGENT2)
         (destination ?SELL ?AGENT1)
         (patient ?SELL ?OBJECT))))

(=>
   (and
      (instance ?SELL Selling)
      (agent ?SELL ?AGENT))
   (origin ?SELL ?AGENT))

(subclass Learning IntentionalPsychologicalProcess)
(documentation Learning "The &%Class of &%Processes which relate to the
acquisition of information.")

(=>
   (and
      (instance ?LEARN Learning)
      (agent ?LEARN ?AGENT))
   (instance ?AGENT CognitiveAgent))

(=>
   (and
      (instance ?LEARN Learning)
      (agent ?LEARN ?AGENT)
      (patient ?LEARN ?PROP))
   (and
      (holdsDuring (BeginFn (WhenFn ?LEARN)) (not (knows ?AGENT ?PROP)))
      (holdsDuring (EndFn (WhenFn ?LEARN)) (knows ?AGENT ?PROP))))

(subclass Discovering IntentionalPsychologicalProcess)
(documentation Discovering "Finding something that was sought.  Note that
this class is restricted to cases of discovering something &%Physical.
For cases involving the acquisition of knowledge, the class &%Learning
should be used.")

(=>
   (and
      (instance ?DISCOVER Discovering)
      (patient ?DISCOVER ?OBJ))
   (exists (?PURSUE)
      (and
         (instance ?PURSUE Pursuing)
         (meetsTemporally (WhenFn ?PURSUE) (WhenFn ?DISCOVER)))))

(=>
   (and
      (instance ?DISCOVER Discovering)
      (patient ?DISCOVER ?OBJ)
      (holdsDuring (WhenFn ?DISCOVER) (located ?OBJ ?PLACE)))
   (exists (?LEARN)
      (and
         (instance ?LEARN Learning)
         (subProcess ?LEARN ?DISCOVER)
         (patient ?LEARN (located ?OBJ ?PLACE)))))

(subclass Classifying IntentionalPsychologicalProcess)
(documentation Classifying "The &%Class of &%IntentionalPsychologicalProcesses
which involve attaching a name or category to a thing or set of things.
Note that &%Classifying is distinguished from &%Learning by the fact
that the latter covers the acquisition by a &%CognitiveAgent of any
&%Proposition, while the former involves the assignment of a label
or category.")

(subclass Reasoning IntentionalPsychologicalProcess)
(documentation Reasoning "The &%Class of &%IntentionalPsychologicalProcesses
which involve concluding, on the basis of either deductive or inductive
evidence, that a particular &%Proposition or &%Sentence is true.")

(=>
   (instance ?AGENT CognitiveAgent)
   (capability Reasoning agent ?AGENT))

(subclass Selecting IntentionalPsychologicalProcess)
(documentation Selecting "The &%Class of &%IntentionalPsychologicalProcesses
which involve opting for one or more &%Entity out of a larger set of &%Entities.")

(subclass Deciding Selecting)
(documentation Deciding "The subclass of &%Selecting where the &%agent
opts for one course of action out of a set of multiple possibilities.")

(=>
   (and
      (instance ?DECIDE Deciding)
      (agent ?DECIDE ?AGENT)
      (patient ?DECIDE ?PROCESS))
   (and
      (instance ?PROCESS IntentionalProcess)
      (agent ?PROCESS ?AGENT)))

(subclass LegalDecision Deciding)
(subclass LegalDecision Declaring)
(documentation LegalDecision "A decision issued by a court with respect to
a &%LegalAction.")

(=>
   (instance ?DECISION LegalDecision)
   (exists (?ACTION)
      (and
         (instance ?ACTION LegalAction)
         (refers ?DECISION ?ACTION))))

(=>
   (instance ?DECISION LegalDecision)
   (exists (?PROCESS)
      (and
         (instance ?PROCESS JudicialProcess)
         (subProcess ?DECISION ?PROCESS))))

(subclass Voting Selecting)
(documentation Voting "&%Voting is the activity of voting in an
&%Election.  Voting is typically done by individuals, while &%Elections
are conducted by &%Organizations.  The voting process by an individual
voter is part of an &%Election process.")

(=>
	(instance ?VOTE Voting)
	(exists (?ELECT)
		(and
			(instance ?ELECT Election)
			(subProcess ?VOTE ?ELECT))))

(subclass Comparing IntentionalPsychologicalProcess)
(subclass Comparing DualObjectProcess)
(documentation Comparing "The &%Class of &%IntentionalPsychologicalProcesses
which involve comparing, relating, contrasting, etc. the properties of
two or more &%Entities.")

(subclass Calculating IntentionalPsychologicalProcess)
(documentation Calculating "&%IntentionalPsychologicalProcesses which involve
the consideration and/or manipulation of instances of &%Quantity.")

(subclass Measuring Calculating)
(documentation Measuring "The &%Class of &%Calculating &%Processes where
the aim is to determine the &%PhysicalQuantity of some aspect of the &%patient.")

(=>
   (and
      (instance ?MEAS Measuring)
      (agent ?MEAS ?AGENT)
      (patient ?MEAS ?OBJ))
   (exists (?QUANT ?UNIT)
      (holdsDuring (EndFn (WhenFn ?MEAS))
         (knows ?AGENT (measure ?OBJ (MeasureFn ?QUANT ?UNIT))))))

(subclass Counting Calculating)
(documentation Counting "Enumerating something.  The &%Class of &%Calculating
&%Processes where the aim is to determine the &%Number corresponding to the
&%patient.")

(=>
   (and
      (instance ?COUNT Counting)
      (agent ?COUNT ?AGENT)
      (patient ?COUNT ?ENTITY))
   (exists (?NUMBER)
      (knows ?AGENT (equal (CardinalityFn ?ENTITY) ?NUMBER))))

(subclass Predicting IntentionalPsychologicalProcess)
(documentation Predicting "The &%Class of &%IntentionalPsychologicalProcesses
which involve the formulation of a &%Proposition about a state of affairs
which might be realized in the future.")

(=>
   (and
      (instance ?PREDICT Predicting)
      (patient ?PREDICT ?FORMULA))
   (exists (?TIME)
      (and
         (holdsDuring ?TIME ?FORMULA)
         (or
            (before ?TIME (WhenFn ?PREDICT))
            (earlier ?TIME (WhenFn ?PREDICT))))))

(subclass Remembering PsychologicalProcess)
(documentation Remembering "The &%Class of &%PsychologicalProcesses which
involve the recollection of prior experiences and/or of knowledge
which was previously acquired.")

(=>
   (and
      (instance ?REMEMBER Remembering)
      (patient ?REMEMBER ?FORMULA))
   (exists (?TIME)
      (and
         (holdsDuring ?TIME ?FORMULA)
         (or
            (before ?TIME (WhenFn ?REMEMBER))
            (earlier ?TIME (WhenFn ?REMEMBER))))))

(subclass Keeping IntentionalProcess)
(documentation Keeping "The &%Class of &%Processes where the &%agent
keeps something in a particular location for an extended period of time.")

(=>
   (and
      (instance ?KEEP Keeping)
      (agent ?KEEP ?AGENT)
      (patient ?KEEP ?OBJ))
   (exists (?PUT)
      (and
         (instance ?PUT Putting)
         (agent ?PUT ?AGENT)
         (patient ?PUT ?OBJ)
         (earlier (WhenFn ?PUT) (WhenFn ?KEEP)))))

(=>
   (and
      (instance ?KEEP Keeping)
      (patient ?KEEP ?OBJ))
   (exists (?PLACE)
      (forall (?TIME)
         (=>
            (temporalPart ?TIME (WhenFn ?KEEP))
            (holdsDuring ?TIME (located ?OBJ ?PLACE))))))

(subclass Confining Keeping)
(documentation Confining "The &%Class of &%Keeping &%Processes where the
&%patient is a &%Human or an &%Animal and is kept involuntarily.  This covers
caging, imprisonment, jailing, etc.")

(=>
   (instance ?CONFINE Confining)
   (exists (?AGENT)
      (and
         (or
            (instance ?AGENT Animal)
            (instance ?AGENT Human))
         (patient ?CONFINE ?AGENT))))

(=>
   (and
      (instance ?CONFINE Confining)
      (patient ?CONFINE ?PERSON)
      (instance ?PERSON Human))
   (not (desires ?PERSON (patient ?CONFINE ?PERSON))))

(subclass Maintaining IntentionalProcess)
(documentation Maintaining "The &%Class of &%Processes where the &%agent
cares for or maintains the &%Object.")

(subclass Repairing IntentionalProcess)
(relatedInternalConcept Repairing Maintaining)
(documentation Repairing "The &%Class of &%Processes where the &%agent
makes a modification or series of modifications to an &%Object that is not
functioning as intended so that it works properly.")

(=>
   (and
      (instance ?REPAIR Repairing)
      (patient ?REPAIR ?OBJ))
   (exists (?DAMAGE)
      (and
         (instance ?DAMAGE Damaging)
         (patient ?DAMAGE ?OBJ)
         (earlier (WhenFn ?DAMAGE) (WhenFn ?REPAIR)))))

(subclass TherapeuticProcess Repairing)
(documentation TherapeuticProcess "A &%Process that is carried out
for the purpose of curing, improving or reducing the pain associated
with a &%DiseaseOrSyndrome.")

(=>
   (and
      (instance ?PROC TherapeuticProcess)
      (patient ?PROC ?BIO))
   (or
      (instance ?BIO Organism)
      (exists (?ORG)
         (and
            (instance ?ORG Organism)
            (part ?BIO ?ORG)))))

(subclass Surgery TherapeuticProcess)
(documentation Surgery "Any &%TherapeuticProcess that involves making an
incision in the &%Animal that is the &%patient of the &%TherapeuticProcess.")

(=>
   (and
      (instance ?ACT Surgery)
      (patient ?ACT ?ANIMAL))
   (exists (?SUBACT)
      (and
         (instance ?SUBACT Cutting)
         (instance ?ANIMAL Animal)
         (patient ?ANIMAL ?CUTTING)
         (subProcess ?SUBACT ?ACT))))

(subclass Damaging InternalChange)
(disjoint Damaging Repairing)
(documentation Damaging "The &%Class of &%Processes where the &%agent
brings about a situation where the &%patient no longer functions normally
or as intended.")

(subclass Destruction Damaging)
(documentation Destruction "The &%subclass of &%Damagings in which
the &%patient (or an essential element of the &%patient) is destroyed.
Note that the difference between this concept and its superclass is solely
one of extent.")

(<=>
   (instance ?PROCESS Destruction)
   (exists (?PATIENT)
      (and
         (patient ?PROCESS ?PATIENT)
         (time ?PATIENT (BeginFn(WhenFn ?PROCESS)))
         (not
            (time ?PATIENT (EndFn (WhenFn ?PROCESS)))))))

(subclass Killing Destruction)
(documentation Killing "The &%subclass of &%Destruction in which the
death of an &%Organism is caused by an &%Organism.  Note that in cases
of suicide the &%Organism would be the same in both cases.")

(=>
   (and
      (instance ?KILL Killing)
      (agent ?KILL ?AGENT)
      (patient ?KILL ?PATIENT))
   (and
      (instance ?AGENT Organism)
      (instance ?PATIENT Organism)))

(=>
   (and
      (instance ?KILL Killing)
      (patient ?KILL ?PATIENT))
   (and
      (holdsDuring (BeginFn (WhenFn ?KILL)) (attribute ?PATIENT Living))
      (holdsDuring (FutureFn (WhenFn ?KILL)) (attribute ?PATIENT Dead))))

(=>
   (and
      (instance ?KILL Killing)
      (patient ?KILL ?OBJ))
   (exists (?DEATH)
      (and
         (instance ?DEATH Death)
         (experiencer ?DEATH ?OBJ)
         (causes ?KILL ?DEATH))))

(subclass Poking IntentionalProcess)
(documentation Poking "The &%Class of &%Processes where the &%agent
pierces the surface of the &%Object with an &%instrument.")

(=>
   (and
      (instance ?POKE Poking)
      (agent ?POKE ?AGENT)
      (patient ?POKE ?OBJ)
      (instrument ?POKE ?INST))
   (holdsDuring (WhenFn ?POKE) (connects ?INST ?AGENT ?OBJ)))

(subclass Cutting Poking)
(documentation Cutting "The &%subclass of &%Poking &%Processes which
involve a sharp &%instrument.")

(subclass Attaching DualObjectProcess)
(disjoint Attaching Detaching)
(relatedInternalConcept Attaching Putting)
(documentation Attaching "A &%Process where one &%Object becomes attached
to another &%Object.  Note that this differs from &%Putting in that two
things which are attached may already be in the same location.")

(=>
   (and
      (instance ?ATTACH Attaching)
      (patient ?ATTACH ?OBJ1)
      (patient ?ATTACH ?OBJ2))
   (and
      (holdsDuring (BeginFn (WhenFn ?ATTACH)) (not (connected ?OBJ1 ?OBJ2)))
      (holdsDuring (EndFn (WhenFn ?ATTACH)) (connected ?OBJ1 ?OBJ2))))

(subclass Detaching DualObjectProcess)
(documentation Detaching "A &%Process where the &%agent detaches one thing
from something else.  Note that this is different from &%Removing in that
neither of the two things which are detached may be removed from the location
where it was attached.")

(=>
   (and
      (instance ?DETACH Detaching)
      (patient ?DETACH ?OBJ1)
      (patient ?DETACH ?OBJ2))
   (and
      (holdsDuring (BeginFn (WhenFn ?DETACH)) (connected ?OBJ1 ?OBJ2))
      (holdsDuring (EndFn (WhenFn ?DETACH)) (not (connected ?OBJ1 ?OBJ2)))))

(subclass Combining DualObjectProcess)
(documentation Combining "A &%Process where two or more &%Substances are
combined into a single &%Substance.")

(<=>
   (and
      (instance ?COMBINE Combining)
      (resource ?COMBINE ?OBJ1)
      (result ?COMBINE ?OBJ2))
   (and
      (holdsDuring (BeginFn (WhenFn ?COMBINE)) (not (piece ?OBJ1 ?OBJ2)))
      (holdsDuring (EndFn (WhenFn ?COMBINE)) (piece ?OBJ1 ?OBJ2))))

(subclass Separating DualObjectProcess)
(disjoint Separating Combining)
(documentation Separating "A &%Process where a &%Substance is separated
into (some of) its &%pieces.")

(subclass ChemicalProcess InternalChange)
(partition ChemicalProcess ChemicalSynthesis ChemicalDecomposition)
(documentation ChemicalProcess "A &%ChemicalProcess occurs whenever
chemical compounds (&%CompoundSubstances) are formed or decomposed.
For example, reactants disappear as chemical change occurs, and products
appear as chemical change occurs.  In a chemical change a chemical
reaction takes place.  Catalysts in a &%ChemicalProcess may speed up the
reaction, but aren't themselves produced or consumed.  Examples: rusting of
iron and the decomposition of water, induced by an electric current, to
gaseous hydrogen and gaseous oxygen.")

(=>
   (and
      (instance ?PROC ChemicalProcess)
      (or
         (resource ?PROC ?STUFF)
         (result ?PROC ?STUFF)))
   (instance ?STUFF PureSubstance))

(subclass ChemicalSynthesis ChemicalProcess)
(subclass ChemicalSynthesis Combining)
(documentation ChemicalSynthesis "The &%Class of &%ChemicalProcesses in
which a &%CompoundSubstance is formed from simpler reactants.")

(=>
   (and
      (resource ?PROC ?SUBSTANCE1)
      (result ?PROC ?SUBSTANCE2)
      (instance ?SUBSTANCE1 ElementalSubstance)
      (instance ?SUBSTANCE2 CompoundSubstance))
   (instance ?PROC ChemicalSynthesis))

(<=>
   (instance ?COMPOUND CompoundSubstance)
   (exists (?ELEMENT1 ?ELEMENT2 ?PROCESS)
      (and
         (instance ?ELEMENT1 ElementalSubstance)
         (instance ?ELEMENT2 ElementalSubstance)
         (not (equal ?ELEMENT1 ?ELEMENT2))
 	   (instance ?PROCESS ChemicalSynthesis)
         (resource ?PROCESS ?ELEMENT1)
         (resource ?PROCESS ?ELEMENT2)
         (result ?PROCESS ?COMPOUND))))

(subclass ChemicalDecomposition ChemicalProcess)
(subclass ChemicalDecomposition Separating)
(documentation ChemicalDecomposition "The &%Class of &%ChemicalProcesses
in which a &%CompoundSubstance breaks down into simpler products.")

(=>
   (and
      (resource ?PROC ?SUBSTANCE1)
      (result ?PROC ?SUBSTANCE2)
      (instance ?SUBSTANCE1 CompoundSubstance)
      (instance ?SUBSTANCE2 ElementalSubstance))
   (instance ?PROC ChemicalDecomposition))

(subclass Combustion ChemicalDecomposition)
(documentation Combustion "The &%Class of &%ChemicalProcesses in which an &%Object
reacts with oxygen and gives off heat.  This includes all &%Processes in which
something is burning.")

(=>
   (instance ?COMBUSTION Combustion)
   (exists (?HEAT ?LIGHT)
      (and
         (instance ?HEAT Heating)
         (instance ?LIGHT RadiatingLight)
         (subProcess ?HEAT ?COMBUSTION)
         (subProcess ?LIGHT ?COMBUSTION))))

(subclass InternalChange Process)
(documentation InternalChange "&%Processes which involve altering an internal
property of an &%Object, e.g. the shape of the &%Object, its coloring, its
structure, etc.  &%Processes that are not instances of this class include
changes that only affect the relationship to other objects, e.g. changes in
spatial or temporal location.")

(=>
   (and
      (instance ?CHANGE InternalChange)
      (patient ?CHANGE ?OBJ))
   (exists (?PROPERTY)
      (or
         (and
            (holdsDuring (BeginFn (WhenFn ?CHANGE)) (attribute ?OBJ ?PROPERTY))
            (holdsDuring (EndFn (WhenFn ?CHANGE)) (not (attribute ?OBJ ?PROPERTY))))
         (and
            (holdsDuring (BeginFn (WhenFn ?CHANGE)) (not (attribute ?OBJ ?PROPERTY)))
            (holdsDuring (EndFn (WhenFn ?CHANGE)) (attribute ?OBJ ?PROPERTY))))))

(subclass WeatherProcess InternalChange)
(documentation WeatherProcess "&%WeatherProcess is the broadest class of
processes that involve weather, including weather seasons (not to be confused
with instances of &%SeasonOfYear), weather systems, and short-term weather
events.")

(subclass Precipitation WeatherProcess)
(subclass Precipitation WaterMotion)
(subclass Precipitation Falling)
(documentation Precipitation "&%Precipitation is the process of
water molecules falling from the air to the ground, in either a
liquid or frozen state.")

(=>
	(instance ?PROCESS Precipitation)
	(exists (?STUFF)
		(and
			(instance ?STUFF Water)
			(patient ?PROCESS ?STUFF))))

(subclass SurfaceChange InternalChange)
(documentation SurfaceChange "&%Processes which involve altering
the properties that apply to the surface of an &%Object.")

(=>
   (and
      (instance ?ALT SurfaceChange)
      (patient ?ALT ?OBJ))
   (exists (?PART ?PROPERTY)
      (and
         (superficialPart ?PART ?OBJ)
         (or
            (and
               (holdsDuring (BeginFn (WhenFn ?ALT)) (attribute ?PART ?PROPERTY))
               (holdsDuring (EndFn (WhenFn ?ALT)) (not (attribute ?PART ?PROPERTY))))
            (and
               (holdsDuring (BeginFn (WhenFn ?ALT)) (not (attribute ?PART ?PROPERTY)))
               (holdsDuring (EndFn (WhenFn ?ALT)) (attribute ?PART ?PROPERTY)))))))

(subclass Coloring SurfaceChange)
(documentation Coloring "The &%subclass of &%SurfaceChange where a
&%ColorAttribute of the &%patient is altered.")

(=>
   (and
      (instance ?COLORING Coloring)
      (patient ?COLORING ?OBJ))
   (exists (?PROPERTY)
      (and
         (instance ?PROPERTY ColorAttribute)
         (or
            (and
               (holdsDuring (BeginFn (WhenFn ?ALT)) (attribute ?PART ?PROPERTY))
               (holdsDuring (EndFn (WhenFn ?ALT)) (not (attribute ?PART ?PROPERTY))))
            (and
               (holdsDuring (BeginFn (WhenFn ?ALT)) (not (attribute ?PART ?PROPERTY)))
               (holdsDuring (EndFn (WhenFn ?ALT)) (attribute ?PART ?PROPERTY)))))))

(subclass ShapeChange InternalChange)
(documentation ShapeChange "The &%Process of changing the shape of an &%Object.")

(=>
   (and
      (instance ?ALT ShapeChange)
      (patient ?ALT ?OBJ))
   (exists (?PROPERTY)
      (and
         (instance ?PROPERTY ShapeAttribute)
         (or
            (and
               (holdsDuring (BeginFn (WhenFn ?ALT)) (attribute ?OBJ ?PROPERTY))
               (holdsDuring (EndFn (WhenFn ?ALT)) (not (attribute ?OBJ ?PROPERTY))))
            (and
               (holdsDuring (BeginFn (WhenFn ?ALT)) (not (attribute ?OBJ ?PROPERTY)))
               (holdsDuring (EndFn (WhenFn ?ALT)) (attribute ?OBJ ?PROPERTY)))))))

(subclass ContentDevelopment IntentionalProcess)
(documentation ContentDevelopment "A &%subclass of &%IntentionalProcess in
which content is modified, its form is altered or it is created anew.")

(=>
   (instance ?DEVELOP ContentDevelopment)
   (exists (?OBJ)
      (and
         (instance ?OBJ ContentBearingObject)
         (patient ?DEVELOP ?OBJ))))

(subclass Reading ContentDevelopment)
(relatedInternalConcept Reading Interpreting)
(documentation Reading "A &%subclass of &%ContentDevelopment in which
content is converted from a written form into a spoken representation.
Note that the class &%Interpreting should be used in cases where a
&%Text is read silently.")

(=>
   (instance ?READ Reading)
   (exists (?TEXT ?PROP)
      (and
         (instance ?TEXT Text)
         (containsInformation ?TEXT ?PROP)
         (realization ?READ ?PROP))))

(subclass Writing ContentDevelopment)
(documentation Writing "A &%subclass of &%ContentDevelopment in which
content is converted from one form (e.g. uttered, written or represented
mentally) into a written form.  Note that this class covers both
transcription and original creation of written &%Texts.")

(subclass Encoding Writing)
(documentation Encoding "Converting a document or message into a formal
language or into a code that can be understood only by a relatively small
body of &%Agents.  Generally speaking, this hinders wide dissemination of
the content in the original document or message.")

(subclass Decoding Writing)
(disjoint Decoding Encoding)
(documentation Decoding "Converting a document or message that has previously
been encoded (see &%Encoding) into a &%Language that can be understood by a
relatively large number of speakers.")

(=>
   (and
      (instance ?DECODE Decoding)
      (patient ?DECODE ?DOC1))
   (exists (?ENCODE ?DOC2 ?TIME)
      (and
         (containsInformation ?DOC2 ?PROP)
         (containsInformation ?DOC1 ?PROP)
 	   (temporalPart ?TIME (PastFn (WhenFn ?DECODE)))
         (holdsDuring ?TIME
            (and
               (instance ?ENCODE Encoding)
               (patient ?ENCODE ?DOC2))))))

(subclass Translating ContentDevelopment)
(subclass Translating DualObjectProcess)
(documentation Translating "Converting content from one &%Language into another.")

(=>
   (and
      (instance ?TRANSLATE Translating)
      (resource ?TRANSLATE ?EXPRESSION1)
      (result ?TRANSLATE ?EXPRESSION2))
   (exists (?LANGUAGE1 ?LANGUAGE2 ?ENTITY)
      (and
         (representsInLanguage ?EXPRESSION1 ?ENTITY ?LANGUAGE1)
         (representsInLanguage ?EXPRESSION2 ?ENTITY ?LANGUAGE2)
         (not (equal ?LANGUAGE1 ?LANGUAGE2)))))

(subclass Wetting Putting)
(documentation Wetting "The &%Class of &%Processes where a &%Liquid is
added to an &%Object.")

(=>
   (and
      (instance ?WET Wetting)
      (patient ?WET ?OBJ))
   (holdsDuring (EndFn (WhenFn ?WET))
      (or
         (attribute ?OBJ Wet)
         (attribute ?OBJ Damp))))

(=>
   (instance ?WET Wetting)
   (exists (?OBJ)
      (and
         (attribute ?OBJ Liquid)
         (patient ?WET ?OBJ))))

(subclass Drying Removing)
(documentation Drying "The &%Class of &%Processes where a &%Liquid is removed
from an &%Object.")

(=>
   (and
      (instance ?DRY Drying)
      (patient ?DRY ?OBJ))
   (holdsDuring (EndFn (WhenFn ?DRY))
      (attribute ?OBJ Dry)))

(subclass Creation InternalChange)
(relatedInternalConcept Creation Destruction)
(documentation Creation "The &%subclass of &%Process in which
something is created.  Note that the thing created is specified
with the &%result &%CaseRole.")

(=>
   (instance ?ACTION Creation)
   (exists (?RESULT)
      (result ?ACTION ?RESULT)))

(<=>
   (instance ?PROCESS Creation)
   (exists (?PATIENT)
      (and
         (patient ?PROCESS ?PATIENT)
         (time ?PATIENT (EndFn(WhenFn ?PROCESS)))
         (not
            (time ?PATIENT (BeginFn (WhenFn ?PROCESS)))))))

(subclass Making Creation)
(subclass Making IntentionalProcess)
(documentation Making "The &%subclass of &%Creation in which an individual
&%Artifact or a type of &%Artifact is made.")

(subclass Constructing Making)
(documentation Constructing "The &%subclass of &%Making in which a
&%StationaryArtifact is built.")

(<=>
   (exists (?BUILD)
      (and
         (instance ?BUILD Constructing)
         (result ?BUILD ?ARTIFACT)))
   (instance ?ARTIFACT StationaryArtifact))

(subclass Manufacture Making)
(documentation Manufacture "The &%Making of &%Artifacts on a mass
scale.")

(subclass Publication Manufacture)
(subclass Publication ContentDevelopment)
(documentation Publication "The &%Manufacture of &%Texts.  Note that
there is no implication that the &%Texts are distributed.  Such
distribution, when it occurs, is an instance of &%Dissemination.")

(=>
   (and
      (instance ?PUB Publication)
      (patient ?PUB ?TEXT))
   (subclass ?TEXT Text))

(subclass Cooking Making)
(documentation Cooking "The &%Making of an &%instance of &%Food.")

(=>
   (instance ?COOK Cooking)
   (exists (?FOOD)
      (and
         (instance ?FOOD Food)
         (result ?COOK ?FOOD))))

(subclass Pursuing IntentionalProcess)
(documentation Pursuing "The class of &%IntentionalProcesses where something is
sought.  Some examples would be hunting, shopping, trawling, and stalking.")

(=>
   (instance ?PURSUE Pursuing)
   (exists (?OBJ)
      (and
         (instance ?OBJ Object)
         (patient ?PURSUE ?OBJ))))

(=>
   (and
      (instance ?PURSUE Pursuing)
      (agent ?PURSUE ?AGENT)
      (patient ?PURSUE ?OBJ))
   (holdsDuring ?PURSUE (wants ?AGENT ?OBJ)))

(=>
   (and
      (instance ?PURSUE Pursuing)
      (agent ?PURSUE ?AGENT)
      (patient ?PURSUE ?OBJ))
   (holdsDuring ?PURSUE (not (possesses ?AGENT ?OBJ))))

(subclass Investigating IntentionalPsychologicalProcess)
(documentation Investigating "The class of &%IntentionalPsychologicalProcesses
where the &%agent attempts to obtaina information (i.e. a &%Proposition denoted
by a &%Formula).")

(=>
   (and
      (instance ?INVESTIGATE Investigating)
      (patient ?INVESTIGATE ?PROP))
   (instance ?PROP Formula))

(=>
   (and
      (instance ?INVESTIGATE Investigating)
      (agent ?INVESTIGATE ?AGENT)
      (patient ?INVESTIGATE ?PROP))
   (holdsDuring (WhenFn ?INVESTIGATE) (not (knows ?AGENT ?PROP))))

(subclass DiagnosticProcess Investigating)
(documentation DiagnosticProcess "A &%Process that is carried out for
the purpose of determining the nature of a &%DiseaseOrSyndrome.")

(=>
   (and
      (instance ?PROC DiagnosticProcess)
      (agent ?PROC ?AGENT))
   (exists (?CAUSE)
      (hasPurposeForAgent ?PROC (knows ?AGENT (causes ?CAUSE ?PROC)) ?AGENT)))

(subclass SocialInteraction IntentionalProcess)
(documentation SocialInteraction "The &%subclass of
&%IntentionalProcess that involves interactions between
&%CognitiveAgents.")

(=>
   (instance ?INTERACTION SocialInteraction)
   (exists (?AGENT1 ?AGENT2)
      (and
         (agent ?INTERACTION ?AGENT1)
         (agent ?INTERACTION ?AGENT2)
         (not
            (equal ?AGENT1 ?AGENT2)))))

(subclass Pretending SocialInteraction)
(documentation Pretending "Any &%SocialInteraction where a
&%CognitiveAgent or &%Group of &%CognitiveAgents attempts to make
another &%CognitiveAgent or &%Group of &%CognitiveAgents believe
something that is false.  This covers deceit, affectation,
impersonation, and entertainment productions, to give just a few
examples.")

(=>
   (instance ?PRETEND Pretending)
   (exists (?PERSON ?PROP)
      (and
         (hasPurpose ?PRETEND (believes ?PERSON ?PROP))
         (true ?PROP True))))

(subclass Communication SocialInteraction)
(relatedInternalConcept Communication ContentDevelopment)
(documentation Communication "A &%SocialInteraction that involves
the transfer of information between two or more &%CognitiveAgents.
Note that &%Communication is closely related to, but essentially
different from, &%ContentDevelopment.  The latter involves the creation
or modification of a &%ContentBearingObject, while &%Communication is
the transfer of information for the purpose of conveying a message.")

(=>
   (instance ?COMMUNICATE Communication)
   (exists (?PHYS ?ENTITY ?AGENT1 ?AGENT2)
      (and
         (refers ?PHYS ?ENTITY)
         (patient ?COMMUNICATE ?PHYS)
         (instance ?AGENT1 CognitiveAgent)
         (agent ?COMMUNICATE ?AGENT1)
         (instance ?AGENT2 CognitiveAgent)
         (destination ?COMMUNICATE ?AGENT2))))

(subclass Disseminating Communication)
(documentation Disseminating "Any &%Communication that involves a
single &%agent and many &%destinations.  This covers the release
of a published book, broadcasting, a theatrical performance, giving
orders to assembled troops, delivering a public lecture, etc.")

(=>
   (instance ?DISSEMINATE Disseminating)
   (exists (?AGENT1 ?AGENT2)
      (and
         (destination ?DISSEMINATE ?AGENT1)
         (instance ?AGENT1 CognitiveAgent)
         (destination ?DISSEMINATE ?AGENT2)
         (instance ?AGENT2 CognitiveAgent)
         (not (equal ?AGENT1 ?AGENT2)))))

(subclass Demonstrating Disseminating)
(documentation Demonstrating "Exhibiting something or a range of things
before the public in a particular location.  This would cover software
demos, theatrical plays, lectures, dance and music recitals, museum
exhibitions, etc.")

(=>
   (instance ?DEMO Demonstrating)
   (exists (?PERSON)
      (attends ?DEMO ?PERSON)))

(subrelation attends experiencer)
(domain attends 1 Demonstrating)
(domain attends 2 Human)
(documentation attends "(&%attends ?DEMO ?PERSON) means that ?PERSON attends,
i.e. is a member of the audience, of the performance event ?DEMO.")

(subclass Advertising Disseminating)
(documentation Advertising "A &%Disseminating whose purpose is to
promote the sale of an &%Object represented in a &%Text or &%Icon
(the advertisement).")

(=>
   (instance ?ADVERT Advertising)
   (exists (?OBJ)
      (and
         (refers ?ADVERT ?OBJ)
         (hasPurpose ?ADVERT (exists (?SALE) (and (instance ?SALE Selling) (patient ?SALE ?OBJ)))))))

(subclass Expressing Communication)
(partition Expressing Gesture ExpressingInLanguage)
(disjointDecomposition Expressing ExpressingApproval ExpressingDisapproval)
(documentation Expressing "Instances of this &%Class express a state of the &%agent.  For example, Jane thanked Barbara for the present she had given her.  The thanking in this case expresses the gratitude of Jane towards Barbara.  Note that &%Expressing, unlike the other speech act types, is not a subclass of &%LinguisticCommunication.  This is because emotions, for example, can be expressed without language, e.g. by smiling.")

(=>
   (and
      (instance ?EXPRESS Expressing)
      (agent ?EXPRESS ?AGENT))
   (exists (?STATE)
      (and
         (instance ?STATE StateOfMind)
         (attribute ?AGENT ?STATE)
         (represents ?EXPRESS ?STATE))))

(subclass Gesture Expressing)
(subclass Gesture BodyMotion)
(documentation Gesture "Any &%BodyMotion, e.g. a hand wave, a nod of the
head, a smile, which expresses a &%StateOfMind.")

(=>
   (and
      (instance ?GESTURE Gesture)
      (agent ?GESTURE ?AGENT))
   (exists (?STATE)
      (and
         (instance ?STATE StateOfMind)
         (attribute ?AGENT ?STATE)
         (represents ?GESTURE ?STATE))))

(subclass ExpressingInLanguage Expressing)
(subclass ExpressingInLanguage LinguisticCommunication)
(documentation ExpressingInLanguage "Any instance of &%Expressing that is also an instance of &%LinguisticCommunication, e.g. thanking someone, expressing condolence, expressing disapproval with an utterance rather than a &%Gesture, etc.")

(subclass LinguisticCommunication Communication)
(partition LinguisticCommunication Stating Supposing Directing Committing ExpressingInLanguage Declaring)
(documentation LinguisticCommunication "A &%Communication that involves
the transfer of information via a &%LinguisticExpression.")

(=>
   (instance ?COMMUNICATE LinguisticCommunication)
   (exists (?OBJ)
      (and
         (represents ?COMMUNICATE ?OBJ)
         (instance ?OBJ LinguisticExpression)
         (patient ?COMMUNICATE ?OBJ))))

(subclass Stating LinguisticCommunication)
(documentation Stating "Instances of this &%Class commit the &%agent to some truth.
For example, John claimed that the moon is made of green cheese.")

(=>
   (and
      (instance ?STATE Stating)
      (agent ?STATE ?AGENT)
      (patient ?STATE ?FORMULA)
      (instance ?FORMULA Formula))
   (holdsDuring (WhenFn ?STATE) (believes ?AGENT ?FORMULA)))

(subclass Supposing LinguisticCommunication)
(documentation Supposing "Instances of this &%Class suppose, for the sake of
argument, that a proposition is true.  For example, John considered what he
would do if he won the lottery.")

(subclass Directing LinguisticCommunication)
(documentation Directing "Instances of this &%Class urge some further action
among the receivers.  A &%Directing can be an &%Ordering, a &%Requesting or
a &%Questioning.")

(subclass Ordering Directing)
(documentation Ordering "A &%Directing in which the receiver is
commanded to realize the content of a &%ContentBearingObject.  Orders
are injunctions, the disobedience of which involves sanctions, or
which express an obligation upon the part of the orderee.")

(=>
   (and
      (instance ?ORDER Ordering)
      (patient ?ORDER ?FORMULA))
   (modalAttribute ?FORMULA Obligation))

(subclass Requesting Directing)
(documentation Requesting "A request expresses a desire that some future
action be performed.  For example, the 5th Battalion requested air support
from the 3rd Bomber Group.  Note that this class covers proposals,
recommendations, suggestions, etc.")

(=>
   (and
      (instance ?REQUEST Requesting)
      (agent ?REQUEST ?AGENT)
      (patient ?REQUEST ?FORMULA)
      (instance ?FORMULA Formula))
   (desires ?AGENT ?FORMULA))

(subclass Questioning Directing)
(documentation Questioning "A request for information.  For example, John asked
Bill if the President had said anything about taxes in his State of the Union address.")

(=>
   (and
      (instance ?QUESTION Questioning)
      (agent ?QUESTION ?AGENT)
      (patient ?QUESTION ?FORMULA)
      (instance ?FORMULA Formula))
   (holdsDuring (WhenFn ?QUESTION) (not (knows ?AGENT ?FORMULA))))

(subclass Committing LinguisticCommunication)
(documentation Committing "Instances of this &%Class commit the &%agent to some
future course.  For example, Bob promised Susan that he would be home by 11pm.")

(=>
   (and
      (instance ?COMMIT Committing)
      (patient ?COMMIT ?FORMULA)
      (instance ?FORMULA Formula))
   (modalAttribute ?FORMULA Promise))

(subclass Offering Committing)
(documentation Offering "The subclass of &%Committing in which a &%CognitiveAgent offers something &%Physical to another agent. Offerings may be unconditional (in which case they are a promise to effect a &%UnilateralGiving) or conditional (in which case they are a promise to effect a &%Transaction of some sort).")

(subclass Declaring LinguisticCommunication)
(documentation Declaring "The &%Class of &%LinguisticCommunications that
effect an institutional alteration when performed by competent authority.
Some examples are nominating, marrying, and excommunicating.")

(=>
   (and
      (instance ?DECLARE Declaring)
      (agent ?DECLARE ?AGENT1))
   (exists (?PROC ?AGENT2)
      (or
         (confersRight ?PROC ?DECLARE ?AGENT2)
         (confersObligation ?PROC ?DECLARE ?AGENT2))))

(subclass Wedding Declaring)
(documentation Wedding "Any &%Declaring that leads to one person being
the &%spouse of another.")

(=>
   (instance ?WED Wedding)
   (exists (?PERSON1 ?PERSON2)
      (result ?WED (spouse ?PERSON1 ?PERSON2))))

(subclass Naming Declaring)
(documentation Naming "The &%Process of assigning a name to someone or something.")

(=>
   (and
      (instance ?PROCESS Naming)
      (patient ?PROCESS ?THING)
      (destination ?PROCESS ?NAME))
   (holdsDuring (FutureFn (WhenFn ?PROCESS)) (names ?NAME ?THING)))

(subclass Cooperation SocialInteraction)
(documentation Cooperation "The &%subclass of &%SocialInteraction where
the participants involved work together for the achievement of a common
goal.")

(=>
   (instance ?COOPERATE Cooperation)
   (exists (?PURP)
      (forall (?AGENT)
         (=>
            (agent ?COOPERATE ?AGENT)
            (hasPurposeForAgent ?COOPERATE ?PURP ?AGENT)))))

(subclass Meeting SocialInteraction)
(documentation Meeting "The coming together of two or more
&%CognitiveAgents for the purpose of &%Communication.  This covers informal
meetings, e.g. visits with family members, and formal meetings, e.g. a board
of directors meeting.")

(=>
   (and
      (instance ?MEET Meeting)
      (agent ?MEET ?AGENT1)
      (agent ?MEET ?AGENT2))
   (holdsDuring (WhenFn ?MEET) (orientation ?AGENT1 ?AGENT2 Near)))

(=>
   (instance ?MEET Meeting)
   (exists (?AGENT1 ?AGENT2)
      (and
         (agent ?MEET ?AGENT1)
         (agent ?MEET ?AGENT2)
         (hasPurpose ?MEET (exists (?COMM) (and (instance ?COMM Communication) (agent ?COMM ?AGENT1) (agent ?COMM ?AGENT2)))))))

(subclass Contest SocialInteraction)
(documentation Contest "A &%SocialInteraction where the &%agent and
&%patient are &%CognitiveAgents who are trying to defeat one another.
Note that this concept is often applied in a metaphorical sense in natural
language, when we speak, e.g., of the struggle of plants for space or
sunlight, or of bacteria for food resources in some environment.")

(=>
   (instance ?CONTEST Contest)
   (exists (?AGENT1 ?AGENT2 ?PURP1 ?PURP2)
      (and
         (agent ?CONTEST ?AGENT1)
         (agent ?CONTEST ?AGENT2)
         (hasPurposeForAgent ?CONTEST ?PURP1 ?AGENT1)
         (hasPurposeForAgent ?CONTEST ?PURP2 ?AGENT2)
         (not
            (equal ?AGENT1 ?AGENT2))
         (not
            (equal ?PURP1 ?PURP2)))))

(subclass ViolentContest Contest)
(documentation ViolentContest "A &%Contest where one participant attempts to
physically injure another participant.")

(subclass War ViolentContest)
(documentation War "A military confrontation between two or more
&%GeopoliticalAreas or &%Organizations whose members are &%GeopoliticalAreas.
As the corresponding axiom specifies, a &%War is made up of &%Battles.")

(=>
   (instance ?WAR War)
   (exists (?BATTLE)
      (and
         (instance ?BATTLE Battle)
         (subProcess ?BATTLE ?WAR))))

(=>
   (and
      (instance ?WAR War)
      (agent ?WAR ?AGENT))
   (or
      (instance ?AGENT GeopoliticalArea)
      (and
         (instance ?AGENT Organization)
         (forall (?MEMBER)
            (=>
               (member ?MEMBER ?AGENT)
               (instance ?MEMBER GeopoliticalArea))))))

(subclass Battle ViolentContest)
(documentation Battle "A &%ViolentContest between two or more military
units within the context of a war.  Note that this does not cover the
metaphorical sense of 'battle', which simply means a struggle of some
sort.  This sense should be represented with the more general concept of
&%Contest.")

(=>
   (instance ?BATTLE Battle)
   (exists (?WAR)
      (and
         (instance ?WAR War)
         (subProcess ?BATTLE ?WAR))))

(=>
   (instance ?BATTLE Battle)
   (exists (?ATTACK)
      (and
         (instance ?ATTACK ViolentContest)
         (subProcess ?ATTACK ?BATTLE))))

(subclass Game Contest)
(subclass Game RecreationOrExercise)
(documentation Game "A &%Contest whose purpose is the
enjoyment/stimulation of the participants or spectators of the &%Game.")

(subclass Sport Game)
(documentation Sport "A &%Game which requires some degree of physical
exercion from the participants of the game.")

(subclass LegalAction Contest)
(documentation LegalAction "Any &%Process where a &%CognitiveAgent seeks
to obtain something through a court of law.")

(subclass Maneuver IntentionalProcess)
(documentation Maneuver "An intentional move or play within a &%Contest.
In many cases, a &%Maneuver is a realization of part of a strategy for
winning the &%Contest, but it also may be just an arbitrary or semi-arbitrary
division of the overarching &%Contest, e.g. innings in a baseball game.")

(=>
   (instance ?MOVE Maneuver)
   (exists (?CONTEST)
      (and
         (instance ?CONTEST Contest)
         (subProcess ?MOVE ?CONTEST))))

(subclass Attack Maneuver)
(documentation Attack "A &%Maneuver in a &%ViolentContest where the
&%agent attempts to inflict damage on the &%patient.")

(=>
   (instance ?ATTACK Attack)
   (exists (?CONTEST)
      (and
         (instance ?CONTEST ViolentContest)
         (subProcess ?ATTACK ?CONTEST))))

(=>
   (and
      (instance ?ATTACK Attack)
      (agent ?ATTACK ?AGENT)
      (patient ?ATTACK ?OBJ))
   (hasPurposeForAgent ?ATTACK (exists (?DAMAGE)
                                  (and
                                     (instance ?DAMAGE Damaging)
                                     (patient ?DAMAGE ?OBJ))) ?AGENT))

(subclass DefensiveManeuver Maneuver)
(documentation DefensiveManeuver "A &%Maneuver in a &%ViolentContest
where the &%agent attempts to avoid being damaged.")

(=>
   (instance ?DEFENSE DefensiveManeuver)
   (exists (?CONTEST)
      (and
         (instance ?CONTEST ViolentContest)
         (subProcess ?DEFENSE ?CONTEST))))

(=>
   (and
      (instance ?DEFENSE DefensiveManeuver)
      (agent ?DEFENSE ?AGENT))
   (hasPurposeForAgent ?DEFENSE (not (exists (?DAMAGE)
                                        (and
                                           (instance ?DAMAGE Damaging)
                                           (patient ?DAMAGE ?AGENT)))) ?AGENT))

(=>
   (and
      (instance ?MANEUVER Maneuver)
      (instance ?CONTEST ViolentContest)
      (subProcess ?MANEUVER ?CONTEST))
   (or
      (instance ?MANEUVER Attack)
      (instance ?MANEUVER DefensiveManeuver)))

(subclass Perception PsychologicalProcess)
(documentation Perception "Sensing some aspect of the material world.
Note that the &%agent of this sensing is assumed to be an &%Animal.")

(=>
   (and
      (instance ?PERCEPT Perception)
      (agent ?PERCEPT ?AGENT))
   (instance ?AGENT Animal))

(=>
   (instance ?AGENT SentientAgent)
   (capability Perception experiencer ?AGENT))

(subclass Seeing Perception)
(documentation Seeing "The &%subclass of &%Perception in which the
sensing is done by an ocular &%Organ.")

(=>
   (and
      (instance ?SEE Seeing)
      (agent ?SEE ?AGENT)
      (patient ?SEE ?OBJ))
   (and
      (attribute ?OBJ Illuminated)
      (exists (?PROP)
         (and
            (instance ?PROP ColorAttribute)
            (knows ?AGENT (attribute ?OBJ ?PROP))))))

(subclass Looking Seeing)
(subclass Looking IntentionalProcess)
(documentation Looking "Any instance of &%Seeing which is intentional.")

(subclass Smelling Perception)
(documentation Smelling "The &%subclass of &%Perception in which the
sensing is done by an olefactory &%Organ.")

(=>
   (and
      (instance ?SMELL Smelling)
      (patient ?SMELL ?OBJ))
   (exists (?ATTR)
      (and
         (instance ?ATTR OlfactoryAttribute)
         (attribute ?OBJ ?ATTR))))

(subclass Tasting Perception)
(documentation Tasting "The &%subclass of &%Perception in which the
sensing is done by of an &%Organ which can discriminate various tastes.")

(=>
   (and
      (instance ?TASTE Tasting)
      (patient ?TASTE ?OBJ))
   (exists (?ATTR)
      (and
         (instance ?ATTR TasteAttribute)
         (attribute ?OBJ ?ATTR))))

(subclass Hearing Perception)
(documentation Hearing "The &%subclass of &%Perception in which the
sensing is done by an auditory &%Organ.")

(=>
   (and
      (instance ?HEAR Hearing)
      (patient ?HEAR ?OBJ))
   (exists (?ATTR)
      (and
         (instance ?ATTR SoundAttribute)
         (attribute ?OBJ ?ATTR))))

(subclass Listening Hearing)
(subclass Listening IntentionalProcess)
(documentation Listening "Any instance of &%Hearing which is intentional.")

(subclass TactilePerception Perception)
(documentation TactilePerception "The &%subclass of &%Perception in which
the sensing is done by &%Touching.  Note that &%Touching need not involve
&%TactilePerception.  For example, a person who has lost all sensation in
both of his legs would have no &%TactilePerception of anything his legs
were &%Touching.")

(=>
   (instance ?TACTILE TactilePerception)
   (exists (?TOUCH)
      (and
         (instance ?TOUCH Touching)
         (subProcess ?TOUCH ?TACTILE))))

(subclass Radiating Motion)
(documentation Radiating "Processes in which some form of electromagnetic
radiation, e.g. radio waves, light waves, electrical energy, etc., is given
off or absorbed by something else.")

(subclass RadiatingLight Radiating)
(documentation RadiatingLight "The &%subclass of &%Radiating in which
light is given off or absorbed.  Some examples include blinking, flashing,
and glittering.")

(<=>
   (exists (?EMIT)
      (and
         (instance ?EMIT RadiatingLight)
         (patient ?EMIT ?REGION)
         (instance ?REGION Region)))
   (attribute ?REGION Illuminated))

(subclass RadiatingSound Radiating)
(documentation RadiatingSound "The &%subclass of &%Radiating in which
sound waves are given off or absorbed.  Some examples include creaking,
roaring, and whistling.")

(=>
   (and
      (instance ?EMIT RadiatingSound)
      (agent ?EMIT ?SOUND))
   (exists (?ATTR)
      (and
         (instance ?ATTR SoundAttribute)
         (attribute ?SOUND ?ATTR))))

(subclass Music RadiatingSound)
(partition Music MonophonicMusic PolyphonicMusic)
(documentation Music "The &%subclass of &%RadiatingSound where the
sound is intended to be melodic and is produced deliberately.")

(subclass RadiatingElectromagnetic Radiating)
(documentation RadiatingElectromagnetic "&%RadiatingElectromagnetic
is the subclass of &%Radiating processes in which electromagnetic
radiation is transmitted or absorbed.")

(subclass RadiatingNuclear Radiating)
(documentation RadiatingNuclear "Releasing atomic energy, i.e. energy from
a nuclear reaction.")

(subclass StateChange InternalChange)
(documentation StateChange "Any &%Process where the &%PhysicalState
of &%part of the &%patient of the &%Process changes.")

(=>
   (and
      (instance ?PROCESS StateChange)
      (patient ?PROCESS ?OBJ))
   (exists (?PART ?STATE1 ?STATE2)
      (and
         (part ?PART ?OBJ)
         (instance ?STATE1 PhysicalState)
         (instance ?STATE2 PhysicalState)
         (not (equal ?STATE1 ?STATE2))
         (holdsDuring (BeginFn (WhenFn ?PROCESS)) (attribute ?PART ?STATE1))
         (holdsDuring (EndFn (WhenFn ?PROCESS)) (attribute ?PART ?STATE2)))))

(subclass Melting StateChange)
(documentation Melting "The &%Class of &%Processes where an &%Object is
heated and converted from a &%Solid to a &%Liquid.")

(=>
   (instance ?MELT Melting)
   (exists (?HEAT)
      (and
         (instance ?HEAT Heating)
         (subProcess ?HEAT ?MELT))))

(=>
   (and
      (instance ?MELT Melting)
      (patient ?MELT ?OBJ))
   (exists (?PART)
      (and
         (part ?PART ?OBJ)
         (holdsDuring (BeginFn (WhenFn ?MELT)) (attribute ?PART Solid))
         (holdsDuring (EndFn (WhenFn ?MELT)) (attribute ?PART Liquid)))))

(subclass Boiling StateChange)
(documentation Boiling "The &%Class of &%Processes where an &%Object is
heated and converted from a &%Liquid to a &%Gas.")

(=>
   (instance ?BOIL Boiling)
   (exists (?HEAT)
      (and
         (instance ?HEAT Heating)
         (subProcess ?HEAT ?BOIL))))

(=>
   (and
      (instance ?BOIL Boiling)
      (patient ?BOIL ?OBJ))
   (exists (?PART)
      (and
         (part ?PART ?OBJ)
         (holdsDuring (BeginFn (WhenFn ?BOIL)) (attribute ?PART Liquid))
         (holdsDuring (EndFn (WhenFn ?BOIL)) (attribute ?PART Gas)))))

(subclass Condensing StateChange)
(documentation Condensing "The &%Class of &%Processes where an &%Object is
cooled and converted from a &%Gas to a &%Liquid.")

(=>
   (instance ?COND Condensing)
   (exists (?COOL)
      (and
         (instance ?COOL Cooling)
         (subProcess ?COOL ?COND))))

(=>
   (and
      (instance ?COND Condensing)
      (patient ?COND ?OBJ))
   (exists (?PART)
      (and
         (part ?PART ?OBJ)
         (holdsDuring (BeginFn (WhenFn ?COND)) (attribute ?PART Gas))
         (holdsDuring (EndFn (WhenFn ?COND)) (attribute ?PART Liquid)))))

(subclass Freezing StateChange)
(documentation Freezing "The &%Class of &%Processes where an &%Object is
cooled and converted from a &%Liquid to a &%Solid.")

(=>
   (instance ?FREEZE Freezing)
   (exists (?COOL)
      (and
         (instance ?COOL Cooling)
         (subProcess ?COOL ?FREEZE))))

(=>
   (and
      (instance ?FREEZE Freezing)
      (patient ?FREEZE ?OBJ))
   (exists (?PART)
      (and
         (part ?PART ?OBJ)
         (holdsDuring (BeginFn (WhenFn ?FREEZE)) (attribute ?PART Liquid))
         (holdsDuring (EndFn (WhenFn ?FREEZE)) (attribute ?PART Solid)))))



;; END FILE

;; <module>OBJECTS</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;
;;    OBJECTS    ;;
;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'MEREOTOPOLOGY'
;; INCLUDES 'PROCESSES'
;; INCLUDES 'QUALITIES'

(subclass AstronomicalBody Region)
(disjoint AstronomicalBody GeographicArea)
(documentation AstronomicalBody "The &%Class of all astronomical
objects of significant size.  It includes &%SelfConnectedObjects
like planets, stars, and asteroids, as well as &%Collections like
nebulae, galaxies, and constellations.  Note that the planet Earth
is an &%AstronomicalBody, but every &%Region of Earth is a
&%GeographicArea.")

(subclass GeographicArea Region)
(partition GeographicArea WaterArea LandArea)
(documentation GeographicArea "A geographic location, generally having
definite boundaries.  Note that this differs from its immediate superclass
&%Region in that a &%GeographicArea is a three-dimensional &%Region of the
earth.  Accordingly, all astronomical objects other than earth and all
one-dimensional and two-dimensional &%Regions are not classed under
&%GeographicArea.")

(instance geographicSubregion BinaryPredicate)
(instance geographicSubregion TransitiveRelation)
(instance geographicSubregion AsymmetricRelation)
(subrelation geographicSubregion properPart)
(subrelation geographicSubregion located)
(domain geographicSubregion 1 GeographicArea)
(domain geographicSubregion 2 GeographicArea)
(documentation geographicSubregion "(&%geographicSubregion ?PART ?WHOLE)
means that the &%GeographicArea ?PART is part of the &%GeographicArea
?WHOLE.")

(subclass GeopoliticalArea GeographicArea)
(subclass GeopoliticalArea Agent)
(documentation GeopoliticalArea "Any &%GeographicArea which is associated
with some sort of political structure.  This class includes &%Lands,
&%Cities, districts of cities, counties, etc.  Note that the identity
of a &%GeopoliticalArea may remain constant after a change in borders.")

(=>
   (and
      (instance ?AREA GeopoliticalArea)
	(leader (GovernmentFn ?AREA) ?PERSON))
   (leader ?AREA ?PERSON))

(=>
   (and
      (instance ?AREA GeopoliticalArea)
	(leader ?AREA ?PERSON))
(leader (GovernmentFn ?AREA) ?PERSON))

(=>
	(and
		(instance ?EVENT Election)
		(agent ?EVENT ?AGENT)
		(instance ?AGENT GeopoliticalArea))
	(instance ?EVENT PoliticalProcess))

(=>
	(and
		(instance ?EVENT Election)
		(agent ?EVENT ?AGENT)
		(instance ?AREA GeopoliticalArea)
		(instance ?AGENT (GovernmentFn ?AREA)))
	(instance ?EVENT PoliticalProcess))

(instance geopoliticalSubdivision AsymmetricRelation)
(instance geopoliticalSubdivision TransitiveRelation)
(subrelation geopoliticalSubdivision geographicSubregion)
(domain geopoliticalSubdivision 1 GeopoliticalArea)
(domain geopoliticalSubdivision 2 GeopoliticalArea)
(documentation geopoliticalSubdivision "(&%geopoliticalSubdivision
?AREA1 ?AREA2) means that ?AREA1 is any geopolitical part of ?AREA2;
that is, ?AREA1 is an integral &%geographicSubregion of ?AREA2 (not a
&%DependencyOrSpecialSovereigntyArea), having its own associated
&%GovernmentOrganization which is subordinated to or constrained by
the government of ?AREA2.  Cf. &%dependentGeopoliticalArea.")

(=>
	(geopoliticalSubdivision ?SUB ?AREA)
	(not (instance ?SUB Nation)))

(subclass WaterArea GeographicArea)
(documentation WaterArea "A body which is made up predominantly of water,
e.g. rivers, lakes, oceans, etc.")

(=>
   (instance ?AREA WaterArea)
   (exists (?BED ?HOLE ?WATER)
      (and
         (equal (PrincipalHostFn ?HOLE) ?BED)
         (instance ?WATER Water)
         (properlyFills ?WATER ?HOLE)
         (equal (MereologicalSumFn ?BED ?WATER) ?AREA))))

(subclass SaltWaterArea WaterArea)
(disjoint SaltWaterArea FreshWaterArea)
(documentation SaltWaterArea "A &%WaterArea whose &%Water is saline, e.g.
oceans and seas.")

(subclass FreshWaterArea WaterArea)
(documentation FreshWaterArea "A &%WaterArea whose &%Water is not saline,
e.g. most rivers and lakes.")

(subclass StreamWaterArea WaterArea)
(disjoint StreamWaterArea StaticWaterArea)
(documentation StreamWaterArea "A relatively narrow &%WaterArea where the
water flows constantly and in the same direction, e.g. a river, a stream,
etc.")

(subclass StaticWaterArea WaterArea)
(documentation StaticWaterArea "A &%WaterArea in which water does not flow
constantly or in the same direction, e.g. most lakes and ponds.")

(subclass LandArea GeographicArea)
(documentation LandArea "An area which is predominantly solid ground,
e.g. a &%Nation, a mountain, a desert, etc.  Note that a &%LandArea may
contain some relatively small &%WaterAreas.  For example, Australia is
a &%LandArea even though it contains various rivers and lakes.")

(=>
   (instance ?LAND1 LandArea)
   (exists (?LAND2)
      (and
         (part ?LAND1 ?LAND2)
         (or
            (instance ?LAND2 Continent)
            (instance ?LAND2 Island)))))

(subclass ShoreArea LandArea)
(documentation ShoreArea "A &%ShoreArea is a &%LandArea approximately 1-3 km wide bordering a body of water, such as an ocean, bay, river, or lake.  A &%ShoreArea may comprise a variety of &%LandForms, such as dunes, sloughs, and marshes.")

(=>
   (instance ?BANK ShoreArea)
   (exists (?WATER)
      (and
         (instance ?WATER WaterArea)
         (meetsSpatially ?BANK ?WATER))))

(subclass Continent LandArea)
(documentation Continent "One of the seven largest land masses on earth,
viz. Africa, North America, South America, Antarctica, Europe, Asia, and
Oceania (also known by the &%Nation which is coextensive with the
&%Continent - Australia).")

(equal (CardinalityFn Continent) 7)

(subclass Island LandArea)
(documentation Island "A &%LandArea that is completely surrounded by a &%WaterArea.")

(=>
   (instance ?ISLAND Island)
   (not
      (exists (?AREA ?PART1 ?PART2)
         (and
            (instance ?AREA LandArea)
            (part ?PART1 ?ISLAND)
            (part ?PART2 ?AREA)
            (not
               (part ?ISLAND ?AREA))
            (not
               (part ?AREA ?ISLAND))
            (meetsSpatially ?PART1 ?PART2)))))

(=>
	(and
		(instance ?ISLE Island)
		(instance ?AREA GeographicArea)
		(meetsSpatially ?ISLE ?AREA))
	(not
		(instance ?AREA LandArea)))

(=>
	(instance ?ISLE Island)
	(exists (?WATER)
		(and
			(instance ?WATER WaterArea)
			(meetsSpatially ?ISLE ?WATER))))

(subclass Nation GeopoliticalArea)
(subclass Nation LandArea)
(documentation Nation "The broadest &%GeopoliticalArea, i.e. &%Nations are
&%GeopoliticalAreas that are not part of any other overarching and
comprehensive governance structure (excepting commonwealths and other sorts
of loose international organizations).")

(subclass StateOrProvince GeopoliticalArea)
(subclass StateOrProvince LandArea)
(documentation StateOrProvince "Administrative subdivisions of a
&%Nation that are broader than any other political subdivisions that
may exist.  This &%Class includes the states of the United States, as
well as the provinces of Canada and European countries.")

(=>
   (instance ?STATE StateOrProvince)
   (exists (?LAND)
      (and
         (instance ?LAND Nation)
         (properPart ?STATE ?LAND))))

(subclass City GeopoliticalArea)
(subclass City LandArea)
(documentation City "A &%LandArea of relatively small size, inhabited
by a community of people, and having some sort of political structure.
Note that this class includes both large cities and small settlements
like towns, villages, hamlets, etc.")

(subclass Transitway Region)
(subclass Transitway SelfConnectedObject)
(documentation Transitway "&%Transitway is the broadest class
of regions which may be passed through as a &%path in instances
of &%Translocation.  &%Transitway includes land, air, and sea
regions, and it includes both natural and artificial transitways.")

(subclass Roadway LandTransitway)
(subclass Roadway LandArea)
(documentation Roadway "&%Roadway is the subclass of &%LandTransitways
that are areas intended for surface travel by self-powered, wheeled
vehicles, excluding those that travel on tracks.  &%Roadways have been
at least minimally improved to enable the passage of vehicles.
&%Roadways include dirt and gravelled roads, paved streets, and
expressways.")

(subclass LandTransitway Transitway)
(subclass LandTransitway LandArea)
(documentation LandTransitway "&%LandTransitway is the subclass of
&%Transitway that represents areas intended for motion over the ground.")

(=>
   (instance ?WAY LandTransitway)
   (hasPurpose (exists (?TRANSPORT)
                  (and
                     (instance ?TRANSPORT Transportation)
                     (path ?TRANSPORT ?WAY)))))

(subclass Water CompoundSubstance)
(documentation Water "The &%Class of samples of the compound H20.  Note
that this &%Class covers both pure and impure &%Water.")

(subclass Mineral Mixture)
(documentation Mineral " Any of various naturally occurring homogeneous substances (such as stone, coal, salt, sulfur, sand, petroleum), or synthetic substances having the chemical composition and crystalline form and properties of a naturally occurring mineral.")

(instance developmentalForm BinaryPredicate)
(instance developmentalForm AsymmetricRelation)
(instance developmentalForm TransitiveRelation)
(subrelation developmentalForm attribute)
(domain developmentalForm 1 OrganicObject)
(domain developmentalForm 2 DevelopmentalAttribute)
(documentation developmentalForm "(&%developmentalForm ?OBJECT ?FORM)
means that ?FORM is an earlier stage in the individual maturation of
?OBJECT.  For example, tadpole and caterpillar are &%developmentalForms
of frogs and butterflies, respectively.")

(=>
   (and
      (holdsDuring ?TIME1 (developmentalForm ?OBJ ?ATTR1))
      (successorAttributeClosure ?ATTR2 ?ATTR1))
   (exists (?TIME2)
      (and
         (earlier ?TIME2 ?TIME1)
         (holdsDuring ?TIME2 (developmentalForm ?OBJ ?ATTR2)))))

(subclass OrganicObject CorpuscularObject)
(partition OrganicObject Organism AnatomicalStructure)
(documentation OrganicObject "This class encompasses &%Organisms,
&%CorpuscularObjects that are parts of &%Organisms, i.e. &%BodyParts,
and &%CorpuscularObjects that are nonintentionally produced by
&%Organisms, e.g. &%ReproductiveBodies.")

(subclass Organism OrganicObject)
(subclass Organism Agent)
(partition Organism Animal Plant Microorganism)
(documentation Organism "Generally, a living individual, including all
&%Plants and &%Animals.")

(=>
   (instance ?ORGANISM Organism)
   (exists (?BIRTH)
      (and
         (instance ?BIRTH Birth)
         (experiencer ?BIRTH ?ORGANISM))))

(instance inhabits BinaryPredicate)
(instance inhabits AsymmetricRelation)
(domain inhabits 1 Organism)
(domain inhabits 2 Object)
(documentation inhabits "A very basic notion of living within something
else.  (&%inhabits ?ORGANISM ?OBJECT) means that ?OBJECT is the residence,
nest, home, etc. of ?ORGANISM.")

(=>
   (inhabits ?ORGANISM ?OBJ)
   (exists (?TIME)
      (holdsDuring ?TIME (located ?ORGANISM ?OBJ))))

(subrelation home inhabits)
(domain home 1 Human)
(domain home 2 StationaryArtifact)
(documentation home "The relation between a &%Human and a home of the
&%Human.")

(instance parent BinaryPredicate)
(subrelation parent familyRelation)
(instance parent AsymmetricRelation)
(instance parent IntransitiveRelation)
(domain parent 1 Organism)
(domain parent 2 Organism)
(documentation parent "The general relationship of parenthood.
(&%parent ?CHILD ?PARENT) means that ?PARENT is a biological parent
of ?CHILD.")

(=>
   (parent ?CHILD ?PARENT)
   (before (BeginFn (WhenFn ?PARENT)) (BeginFn (WhenFn ?CHILD))))

(=>
   (and
      (parent ?CHILD ?PARENT)
      (subclass ?CLASS Organism)
      (instance ?PARENT ?CLASS))
   (instance ?CHILD ?CLASS))

(=>
   (parent ?CHILD ?PARENT)
   (or
      (mother ?CHILD ?PARENT)
      (father ?CHILD ?PARENT)))

(=>
   (instance ?ORGANISM Organism)
   (exists (?PARENT)
      (parent ?ORGANISM ?PARENT)))

(instance mother SingleValuedRelation)
(subrelation mother parent)
(domain mother 1 Organism)
(domain mother 2 Organism)
(documentation mother "The general relationship of motherhood.
(&%mother ?CHILD ?MOTHER) means that ?MOTHER is the biological mother
of ?CHILD.")

(=>
   (mother ?CHILD ?MOTHER)
   (attribute ?MOTHER Female))

(instance father SingleValuedRelation)
(subrelation father parent)
(domain father 1 Organism)
(domain father 2 Organism)
(documentation father "The general relationship of fatherhood.
(&%father ?CHILD ?FATHER) means that ?FATHER is the biological father
of ?CHILD.")

(=>
   (father ?CHILD ?FATHER)
   (attribute ?FATHER Male))

(instance sibling BinaryPredicate)
(subrelation sibling familyRelation)
(instance sibling SymmetricRelation)
(instance sibling IrreflexiveRelation)
(domain sibling 1 Organism)
(domain sibling 2 Organism)
(documentation sibling "The relationship between two &%Organisms that
have the same &%mother and &%father.  Note that this relationship does
not hold between half-brothers, half-sisters, etc.")

(<=>
   (sibling ?ANIMAL1 ?ANIMAL2)
   (and
      (not (equal ?ANIMAL1 ?ANIMAL2))
      (exists (?FATHER ?MOTHER)
         (and
            (father ?ANIMAL1 ?FATHER)
            (father ?ANIMAL2 ?FATHER)
            (mother ?ANIMAL1 ?MOTHER)
            (mother ?ANIMAL2 ?MOTHER)))))

(subrelation daughter parent)
(domain daughter 1 Woman)
(domain daughter 2 Human)
(documentation daughter "The general relationship of daughterhood.
(&%daughter ?CHILD ?PARENT) means that ?CHILD is the biological daughter
of ?PARENT.")

(subrelation son parent)
(domain son 1 Man)
(domain son 2 Human)
(documentation son "The general relationship of being a son.
(&%son ?CHILD ?PARENT) means that ?CHILD is the biological
son of ?PARENT.")

(subrelation brother sibling)
(instance brother IrreflexiveRelation)
(instance brother TransitiveRelation)
(domain brother 1 Man)
(domain brother 2 Human)
(documentation brother "The general relationship of being a brother.
(&%brother ?MAN ?PERSON) means that ?MAN is the brother of ?PERSON.")

(subrelation sister sibling)
(instance sister IrreflexiveRelation)
(instance sister TransitiveRelation)
(domain sister 1 Woman)
(domain sister 2 Human)
(documentation sister "The general relationship of being a sister.
(&%sister ?WOMAN ?PERSON) means that ?WOMAN is the sister of ?PERSON.")

(subrelation ancestor familyRelation)
(instance ancestor TransitiveRelation)
(instance ancestor IrreflexiveRelation)
(domain ancestor 1 Organism)
(domain ancestor 2 Organism)
(documentation ancestor "The transitive closure of the &%parent predicate.
(&%ancestor ?DESCENDANT ?ANCESTOR) means that ?ANCESTOR is either the
&%parent of ?DESCENDANT or the &%parent of the &%parent of &%DESCENDANT or
etc.")

(=>
   (parent ?PARENT ?CHILD)
   (ancestor ?PARENT ?CHILD))

;; The following formulas incorporate the content in the Natural-Kinds
;; ontology developed by ITBM-CNR.  This content is essentially a set of
;; high-level biological categories.

(subclass Plant Organism)
(documentation Plant "An &%Organism having cellulose cell walls, growing
by synthesis of &%Substances, generally distinguished by the presence of
chlorophyll, and lacking the power of locomotion.")

(subclass FloweringPlant Plant)
(documentation FloweringPlant "A &%Plant that produces seeds and flowers.
This class includes trees, shrubs, herbs, and flowers.")

(subclass NonFloweringPlant Plant)
(disjoint NonFloweringPlant FloweringPlant)
(disjointDecomposition NonFloweringPlant Alga Fern Fungus Moss)
(documentation NonFloweringPlant "A &%Plant that reproduces with spores and
does not produce flowers.")

(subclass Alga NonFloweringPlant)
(documentation Alga "A chiefly aquatic plant that contains chlorophyll,
but does not form embryos during development and lacks vascular tissue.")

(=>
	(instance ?ALGA Alga)
	(exists (?WATER)
		(and
			(inhabits ?ALGA ?WATER)
			(instance ?WATER Water))))

(subclass Fungus NonFloweringPlant)
(documentation Fungus "A eukaryotic &%Organism characterized by the
absence of chlorophyll and the presence of rigid cell walls. Included
here are both slime molds and true fungi such as yeasts, molds, mildews,
and mushrooms.")

(=>
	(and
		(instance ?FUNGUS Fungus)
		(inhabits ?FUNGUS ?OBJ))
	(instance ?OBJ Organism))

(subclass Moss NonFloweringPlant)
(documentation Moss "A &%NonFloweringPlant without true roots and little
if any vascular tissue.")

(subclass Fern NonFloweringPlant)
(documentation Fern "A &%NonFloweringPlant that contains vascular tissue.
This class includes true ferns, as well as horsetails, club mosses, and
whisk ferns.")

(subclass Animal Organism)
(partition Animal Vertebrate Invertebrate)
(documentation Animal "An &%Organism with eukaryotic &%Cells, and lacking
stiff cell walls, plastids, and photosynthetic pigments.")

(subclass Microorganism Organism)
(documentation Microorganism "An &%Organism that can be seen only with
the aid of a microscope.")

(subclass Bacterium Microorganism)
(documentation Bacterium "A small, typically one-celled, prokaryotic
&%Microorganism.")

(=>
   (instance ?BACTERIUM Bacterium)
   (exists (?CELL1)
      (and
         (component ?CELL1 ?BACTERIUM)
         (instance ?CELL1 Cell)
         (forall (?CELL2)
            (=>
               (and
                  (component ?CELL2 ?BACTERIUM)
                  (instance ?CELL2 Cell))
               (equal ?CELL1 ?CELL2))))))

(=>
	(and
		(instance ?BACTERIUM Bacterium)
		(inhabits ?BACTERIUM ?OBJ))
	(instance ?OBJ Organism))

(subclass Virus Microorganism)
(documentation Virus "An &%Organism consisting of a core of a single
nucleic acid enclosed in a protective coat of protein. A virus may replicate
only inside a host living cell. A virus exhibits some but not all of the
usual characteristics of living things.")

(=>
   (instance ?VIRUS Virus)
   (exists (?MOL1)
      (and
         (component ?MOL1 ?VIRUS)
         (instance ?MOL1 Molecule)
         (forall (?MOL2)
            (=>
               (and
                  (component ?MOL2 ?VIRUS)
                  (instance ?MOL2 Molecule))
               (equal ?MOL1 ?MOL2))))))

(=>
	(and
		(instance ?VIRUS Virus)
		(inhabits ?VIRUS ?OBJ))
	(instance ?OBJ Organism))

(=>
	(and
		(instance ?VIRUS Virus)
		(instance ?PROC Replication)
		(agent ?PROC ?VIRUS))
	(exists (?CELL)
		(and
			(located ?PROC ?CELL)
			(instance ?CELL Cell))))

(subclass Vertebrate Animal)
(documentation Vertebrate "An &%Animal which has a spinal column.")

(subclass Invertebrate Animal)
(disjointDecomposition Invertebrate Worm Mollusk Arthropod)
(documentation Invertebrate "An &%Animal which has no spinal column.")

(subclass Worm Invertebrate)
(documentation Worm "Long, narrow, soft-bodied &%Invertebrates.")

(subclass Mollusk Invertebrate)
(documentation Mollusk "Soft-bodied &%Invertebrate that is usually
contained in a shell.  Includes oysters, clams, mussels, snails, slugs,
octopi, and squid.")

(subclass Arthropod Invertebrate)
(disjointDecomposition Arthropod Arachnid Myriapod Insect Crustacean)
(documentation Arthropod "A &%Class of &%Invertebrate that includes
&%Arachnids and &%Insects.")

(subclass Arachnid Arthropod)
(documentation Arachnid "A &%Class of &%Arthropods that includes
ticks and spiders.")

(subclass Myriapod Arthropod)
(documentation Myriapod "A &%Class of &%Arthropods that includes
centipedes and millipedes.")

(subclass Insect Arthropod)
(documentation Insect "A &%Class of small &%Arthropods that are
air-breathing and that are distinguished by appearance.")

(subclass Crustacean Arthropod)
(documentation Crustacean "A &%Class of &%Arthropods that mainly dwells
in water and has a segmented body and a chitinous exoskeleton.  Includes
lobsters, crabs, shrimp, and barnacles.")

(subclass ColdBloodedVertebrate Vertebrate)
(disjointDecomposition ColdBloodedVertebrate Amphibian Fish Reptile)
(documentation ColdBloodedVertebrate "&%Vertebrates whose body temperature
is not internally regulated.")

(subclass WarmBloodedVertebrate Vertebrate)
(disjoint WarmBloodedVertebrate ColdBloodedVertebrate)
(documentation WarmBloodedVertebrate "&%Vertebrates whose body temperature
is internally regulated.")

(subclass Amphibian ColdBloodedVertebrate)
(documentation Amphibian "A cold-blooded, smooth-skinned &%Vertebrate
which characteristically hatches as an aquatic larva, breathing by
gills.  When mature, the &%Amphibian breathes with &%Lungs.")

(subclass Bird WarmBloodedVertebrate)
(disjoint Bird Mammal)
(documentation Bird "A &%Vertebrate having a constant body temperature
and characterized by the presence of feathers.")

(subclass Fish ColdBloodedVertebrate)
(documentation Fish "A cold-blooded aquatic &%Vertebrate characterized by
fins and breathing by gills. Included here are &%Fish having either a bony
skeleton, such as a perch, or a cartilaginous skeleton, such as a shark.
Also included are those &%Fish lacking a jaw, such as a lamprey or
hagfish.")

(=>
	(instance ?FISH Fish)
	(exists (?WATER)
		(and
			(inhabits ?FISH ?WATER)
			(instance ?WATER Water))))

(subclass Mammal WarmBloodedVertebrate)
(disjointDecomposition Mammal AquaticMammal HoofedMammal Marsupial Rodent Primate)
(documentation Mammal "A &%Vertebrate having a constant body temperature
and characterized by the presence of hair, mammary glands, and sweat
glands.")

(subclass AquaticMammal Mammal)
(documentation AquaticMammal "The &%Class of &%Mammals that dwell chiefly
in the water.  Includes whales, dolphins, manatees, seals, and walruses.")

(subclass HoofedMammal Mammal)
(documentation HoofedMammal "The &%Class of quadruped &%Mammals with hooves.
Includes horses, cows, sheep, pigs, antelope, etc.")

(subclass Marsupial Mammal)
(documentation Marsupial "The &%Class of &%Mammals which have a pouch for
their young.")

(subclass Carnivore Mammal)
(documentation Carnivore "The &%Class of flesh-eating &%Mammals.  Members
of this &%Class typically have four or five claws on each paw.  Includes
cats, dogs, bears, racoons, and skunks.")

(=>
   (and
      (instance ?CARNIVORE Carnivore)
      (instance ?EAT Eating)
      (agent ?EAT ?CARNIVORE)
      (patient ?EAT ?PREY))
   (instance ?PREY Animal))

(subclass Canine Carnivore)
(disjoint Canine Feline)
(documentation Canine "The &%Class of &%Carnivores with completely
separable toes, nonretractable claws, and long muzzles.")

(subclass Feline Carnivore)
(documentation Feline "The &%Class of &%Carnivores with completely
separable toes, nonretractable claws, slim bodies, and rounded heads.")

(subclass Rodent Mammal)
(documentation Rodent "The &%Class of &%Mammals with one or two pairs
of incisors for gnawing.  Includes rats, mice, guinea pigs, and
rabbits.")

(subclass Primate Mammal)
(disjointDecomposition Primate Ape Monkey Hominid)
(documentation Primate "The &%Class of &%Mammals which are
&%Primates.")

(subclass Ape Primate)
(documentation Ape "Various &%Primates with no tails or only short
tails.")

(subclass Monkey Primate)
(documentation Monkey "Various &%Primates with relatively long
tails.")

(subclass Hominid Primate)
(documentation Hominid "Includes &%Humans and relatively recent
ancestors of &%Humans.")

(subclass Human Hominid)
(subclass Human CognitiveAgent)
(documentation Human "Modern man, the only remaining species of the Homo
genus.")

(subclass Man Human)
(documentation Man "The class of &%Male &%Humans.")

(=>
   (instance ?MAN Man)
   (attribute ?MAN Male))

(subclass Woman Human)
(documentation Woman "The class of &%Female &%Humans.")

(=>
   (instance ?WOMAN Woman)
   (attribute ?WOMAN Female))

(subclass Reptile ColdBloodedVertebrate)
(documentation Reptile "A &%ColdBloodedVertebrate having an external
covering of scales or horny plates.  &%Reptiles breathe by means of
&%Lungs and generally lay eggs.")

;; The following formulas cover biologically related &%Classes under
;; &%Substance.

(subclass BiologicallyActiveSubstance Substance)
(documentation BiologicallyActiveSubstance "A &%Substance that is
capable of inducing a change in the structure or functioning of an
&%Organism.  This &%Class includes &%Substances used in the treatment,
diagnosis, prevention or analysis of normal and abnormal body function.
This &%Class also includes &%Substances that occur naturally in the body
and are administered therapeutically.  Finally, &%BiologicallyActiveSubstance
includes &%Nutrients, most drugs of abuse, and agents that require special
handling because of their toxicity.")

(subclass Nutrient BiologicallyActiveSubstance)
(disjointDecomposition Nutrient Protein Carbohydrate Vitamin)
(documentation Nutrient "A &%BiologicallyActiveSubstance required by an &%Organism.
It is generally ingested as &%Food, and it is of primary interest because of its role
in the biologic functioning of the &%Organism.")

(subclass Protein Nutrient)
(documentation Protein "A &%Nutrient made up of amino acids joined by
peptide bonds.")

(subclass Enzyme Protein)
(documentation Enzyme "A complex &%Protein that is produced by living
cells and which catalyzes specific biochemical reactions. There are six
main types of enzymes:  oxidoreductases, transferases, hydrolases,
lyases, isomerases, and ligases.")

(subclass Carbohydrate Nutrient)
(documentation Carbohydrate "An element of living cells and a source of
energy for &%Animals.  This class includes both simple &%Carbohydrates,
i.e. sugars, and complex &%Carbohydrates, i.e. starches.")

(subclass Vitamin Nutrient)
(documentation Vitamin "A &%Nutrient present in natural products or made
synthetically, which is essential in the diet of &%Humans and other higher
&%Animals.  Included here are &%Vitamin precursors and provitamins.")

(subclass GasMixture Mixture)
(documentation GasMixture "Any &%Mixture that satisfies two conditions,
viz. it is made up predominantly of things which are a &%Gas and any
component other than &%Gas in the &%Mixture is in the form of fine particles which are suspended in the &%Gas.")

(subclass Smoke GasMixture)
(documentation Smoke "A mixture of fine particles suspended in a gas that is
produced by &%Combustion.")

(=>
   (instance ?SMOKE Smoke)
   (exists (?BURNING)
      (and
         (instance ?BURNING Combustion)
         (result ?BURNING ?SMOKE))))

(subclass Cloud GasMixture)
(documentation Cloud "Any &%GasMixture that is visible, e.g. clouds of &%Smoke produced by a fire or clouds of water vapor in the sky.")

(=>
   (instance ?CLOUD Cloud)
   (capability Seeing patient ?CLOUD))

(subclass WaterCloud Cloud)
(documentation WaterCloud "Any &%Cloud that is composed primarily of water vapor.")

(=>
   (instance ?CLOUD WaterCloud)
   (exists (?WATER)
      (and
         (instance ?WATER Water)
         (part ?WATER ?CLOUD))))

(=>
   (instance ?CLOUD WaterCloud)
   (forall (?PART)
      (=>
         (and
            (part ?PART ?CLOUD)
            (not (instance ?PART Water)))
         (exists (?WATER)
            (and
               (instance ?WATER Water)
               (part ?WATER ?CLOUD)
               (measure ?WATER ?MEASURE1)
               (measure ?PART ?MEASURE2)
               (greaterThan ?WATER ?PART))))))

(subclass Air Mixture)
(subclass Air (ExtensionFn Gas))
(documentation Air "&%Air is the gaseous stuff that makes up the
atmosphere surrounding Earth.")

(=>
	(instance ?AIR Air)
	(piece ?AIR EarthsAtmosphere))

(=>
	(instance ?AIRSPACE AtmosphericRegion)
	(exists (?AIR)
		(and
			(instance ?AIR Air)
			(part ?AIR ?AIRSPACE))))

(=>
	(instance ?AIR Air)
	(exists (?PART)
		(and
		     (instance ?PART Oxygen)
		     (part ?PART ?AIR))))

(=>
	(instance ?AIR Air)
	(exists (?PART)
		(and
		     (instance ?PART Nitrogen)
		     (part ?PART ?AIR))))

(=>
   (instance ?WIND Wind)
   (exists (?AIR)
      (and
         (patient ?WIND ?AIR)
         (instance ?AIR Air))))

(subclass BodySubstance Mixture)
(documentation BodySubstance "Extracellular material and mixtures of
cells and extracellular material that are produced, excreted or accreted
by an &%Organism.  Included here are &%Substances such as saliva, dental
enamel, sweat, and gastric acid.")

(subclass Hormone BodySubstance)
(subclass Hormone BiologicallyActiveSubstance)
(documentation Hormone "In &%Animals, a chemical secreted by an
endocrine gland whose products are released into the circulating fluid.
&%Plant hormones or synthetic hormones which are used only to alter or
control various physiologic processes, e.g., reproductive control agents,
are assigned to the &%Class &%BiologicallyActiveSubstance. &%Hormones act as
chemical messengers and regulate various physiologic processes such as
growth, reproduction, metabolism, etc.  They usually fall into two broad
categories, viz. steroid hormones and peptide hormones.")

(=>
   (instance ?HORMONE Hormone)
   (exists (?PROCESS ?GLAND)
      (and
         (instance ?GLAND Gland)
         (instrument ?PROCESS ?GLAND)
         (result ?PROCESS ?HORMONE))))

(subclass Blood BodySubstance)
(documentation Blood "A fluid present in &%Animals that transports
&%Nutrients to and waste products away from various &%BodyParts.")

(subclass Food SelfConnectedObject)
(disjointDecomposition Food Meat Beverage)
(documentation Food "Any &%SelfConnectedObject containing &%Nutrients,
such as carbohydrates, proteins, and fats, that can be ingested by a
living &%Animal and metabolized into energy and body tissue.")

(=>
    (instance ?FOOD Food)
    (exists (?NUTRIENT)
        (and
            (instance ?NUTRIENT Nutrient)
            (part ?NUTRIENT ?FOOD))))

(=>
   (instance ?FOOD Food)
   (forall (?PART1)
      (=>
         (part ?PART1 ?FOOD)
         (exists (?PART2 ?ANIMAL)
            (and
               (part ?PART1 ?PART2)
               (part ?PART2 ?ANIMAL)
               (instance ?ANIMAL Animal))))))

(subclass Meat Food)
(documentation Meat "Any &%Food which was originally part of an
&%Animal and is not ingested by drinking, including eggs and animal
blood that is eaten as food.  Note that this class covers both raw
meat and meat that has been prepared in some way, e.g. by cooking.
Note too that preparations involving &%Meat and &%FruitOrVegetable
are classed directly under &%Food.")

(=>
   (instance ?MEAT Meat)
   (forall (?PART)
      (=>
         (part ?PART ?MEAT)
         (exists (?SUBPART ?TIME ?ANIMAL)
            (and
               (part ?SUBPART ?PART)
               (holdsDuring ?TIME (and (instance ?ANIMAL Animal) (part ?SUBPART ?ANIMAL))))))))

(subclass Beverage Food)
(documentation Beverage "Any &%Food that is ingested by &%Drinking.
Note that this class is disjoint with the other subclasses of &%Food,
i.e. &%Meat and &%FruitOrVegetable.")

(=>
   (instance ?BEV Beverage)
   (attribute ?BEV Liquid))

(=>
   (and
      (instance ?DRINK Drinking)
      (patient ?DRINK ?BEV))
   (instance ?BEV Beverage))

(subclass AnatomicalStructure OrganicObject)
(partition AnatomicalStructure BodyPart AbnormalAnatomicalStructure)
(partition AnatomicalStructure AnimalAnatomicalStructure PlantAnatomicalStructure)
(documentation AnatomicalStructure "A normal or pathological part
of the anatomy or structural organization of an &%Organism.  This
class covers &%BodyParts, as well as structures that are given off
by &%Organisms, e.g. &%ReproductiveBodies.")

(=>
    (instance ?ANAT AnatomicalStructure)
    (exists (?ORGANISM ?TIME)
        (and
            (instance ?ORGANISM Organism)
            (temporalPart ?TIME (WhenFn ?ORGANISM))
            (holdsDuring ?TIME (part ?ANAT ?ORGANISM)))))

(=>
    (instance ?PART AnatomicalStructure)
    (exists (?CELL)
        (and
            (instance ?CELL Cell)
            (part ?CELL ?PART))))

(subclass AbnormalAnatomicalStructure AnatomicalStructure)
(documentation AbnormalAnatomicalStructure "Any &%AnatomicalStructure which
is not normally found in the &%Organism of which it is a part, i.e. it is
the result of a &%PathologicProcess.  This class covers tumors, birth marks,
goiters, etc.")

(=>
   (instance ?STRUCTURE AbnormalAnatomicalStructure)
   (exists (?PROC)
      (and
         (instance ?PROC PathologicProcess)
         (result ?PROC ?PART))))

(subclass BodyPart AnatomicalStructure)
(documentation BodyPart "A collection of &%Cells and &%Tissues which
are localized to a specific area of an &%Organism and which are not
pathological. The instances of this &%Class range from gross structures
to small components of complex &%Organs.")

(=>
    (instance ?PART BodyPart)
    (exists (?ORGANISM ?TIME)
        (and
            (instance ?ORGANISM Organism)
            (temporalPart ?TIME (WhenFn ?ORGANISM))
            (holdsDuring ?TIME (part ?ANAT ?ORGANISM)))))

(=>
   (instance ?PART BodyPart)
   (exists (?PROC)
      (and
         (instance ?PROC PhysiologicProcess)
         (result ?PROC ?PART))))

(subclass AnimalAnatomicalStructure AnatomicalStructure)
(documentation AnimalAnatomicalStructure "&%AnatomicalStructures that
are possessed exclusively by &%Animals.")

(=>
   (and
      (instance ?STRUCTURE AnimalAnatomicalStructure)
      (instance ?ANIMAL Organism)
      (part ?STRUCTURE ?ANIMAL))
   (instance ?ANIMAL Animal))

(subclass PlantAnatomicalStructure AnatomicalStructure)
(documentation PlantAnatomicalStructure "&%AnatomicalStructures that
are possessed exclusively by &%Plants.")

(=>
   (and
      (instance ?STRUCTURE PlantAnatomicalStructure)
      (instance ?PLANT Organism)
      (part ?STRUCTURE ?PLANT))
   (instance ?PLANT Plant))

(subclass ReproductiveBody BodyPart)
(documentation ReproductiveBody "Reproductive structure of &%Organisms.
Consists of an &%Embryonic &%Object and a nutritive/protective envelope.
Note that this class includes seeds, spores, and &%FruitOrVegetables, as
well as the eggs produced by &%Animals.")

(subclass Egg ReproductiveBody)
(subclass Egg AnimalAnatomicalStructure)
(documentation Egg "The fertilized or unfertilized female &%ReproductiveBody of an &%Animal.  This includes &%Bird and &%Reptile eggs, as well as mammalian ova.")

(subclass Pollen ReproductiveBody)
(subclass Pollen PlantAnatomicalStructure)
(documentation Pollen "A powder produced by &%FloweringPlants that contains male
gametes and is capable of fertilizing the seeds of &%FloweringPlants of the same
species.")

(subclass Spore ReproductiveBody)
(subclass Spore PlantAnatomicalStructure)
(documentation Spore "Any &%ReproductiveBody of a &%NonFloweringPlant.")

(=>
   (instance ?SPORE Spore)
   (exists (?PLANT ?TIME)
      (and
         (instance ?PLANT NonFloweringPlant)
         (holdsDuring ?TIME (part ?SPORE ?PLANT)))))

(subclass Seed ReproductiveBody)
(subclass Seed PlantAnatomicalStructure)
(documentation Seed "The fertilized or unfertilized female &%ReproductiveBody of a &%FloweringPlant.")

(=>
   (instance ?SEED Seed)
   (exists (?PLANT ?TIME)
      (and
         (instance ?PLANT FloweringPlant)
         (holdsDuring ?TIME (part ?SEED ?PLANT)))))

(subclass FruitOrVegetable PlantAnatomicalStructure)
(subclass FruitOrVegetable ReproductiveBody)
(documentation FruitOrVegetable "Any fruit or vegetable, i.e. a
ripened &%ReproductiveBody of a &%Plant.  Note that &%FruitOrVegetable
is not a subclass of &%Food, because some fruits, e.g. poisonous
berries, are not edible.")

(subclass BodyCovering BodyPart)
(documentation BodyCovering "Any &%BodyPart which is a covering of another
&%BodyPart or of an entire &%Organism.  This would include the rinds of
&%FruitOrVegetables and the skins of &%Animals.")

(=>
   (instance ?COVER BodyCovering)
   (exists (?BODY)
      (and
         (superficialPart ?COVER ?BODY)
         (or
            (instance ?BODY Organism)
            (instance ?BODY BodyPart)))))

(subclass BodyJunction BodyPart)
(documentation BodyJunction "The place where two &%BodyParts
meet or connect.")

(=>
    (instance ?JUNCT BodyJunction)
    (exists (?STRUCT)
        (and
            (instance ?STRUCT BodyPart)
            (component ?JUNCT ?STRUCT))))

(=>
    (instance ?JUNCT BodyJunction)
    (exists (?STRUCT1 ?STRUCT2)
        (and
            (connected ?JUNCT ?STRUCT1)
	      (connected ?JUNCT ?STRUCT2)
            (instance ?STRUCT1 BodyPart)
            (instance ?STRUCT2 BodyPart)
            (not
                (equal ?STRUCT1 ?STRUCT2)))))

(subclass BodyVessel BodyPart)
(documentation BodyVessel "Any tube-like structure which occurs naturally in
an &%Organism and through which a &%BodySubstance can circulate.")

(subclass Cell BodyPart)
(documentation Cell "The fundamental structural and functional unit of
living &%Organisms.")

(subclass Organ BodyPart)
(documentation Organ "A somewhat independent &%BodyPart that performs a
specialized function.  Note that this functional definition covers bodily
systems, e.g. the digestive system or the central nervous system.")

(=>
   (instance ?ORGAN Organ)
   (exists (?PURP)
      (hasPurpose ?ORGAN ?PURP)))

(subclass Gland Organ)
(documentation Gland "An &%Organ that removes &%Substances from the &%Blood,
alters them in some way, and then releases them.")

(subclass Tissue BodySubstance)
(disjointDecomposition Tissue Bone Muscle FatTissue)
(documentation Tissue "An aggregation of similarly specialized &%Cells
and the associated intercellular substance. &%Tissues are relatively
non-localized in comparison to &%BodyParts, &%Organs or &%Organ components.
The main features of &%Tissues are self-connectivity (see
&%SelfConnectedObject) and being a homogeneous mass (all parts in the
same granularity are instances of &%Tissue as well).")

(=>
    (instance ?STUFF Tissue)
    (exists (?PART)
        (and
            (instance ?PART Cell)
            (part ?PART ?STUFF))))

(=>
    (instance ?STUFF Tissue)
    (exists (?ORGANISM)
        (and
            (instance ?ORGANISM Organism)
            (part ?STUFF ?ORGANISM))))

(subclass Bone Tissue)
(documentation Bone "Rigid &%Tissue composed largely of calcium that makes up
the skeleton of &%Vertebrates.  Note that this &%Class also includes teeth.")

(=>
   (instance ?BONE Bone)
   (exists (?VERT)
      (and
         (instance ?VERT Vertebrate)
         (part ?BONE ?VERT))))

(subclass Muscle Tissue)
(documentation Muscle "Nonrigid &%Tissue appearing only in &%Animals and
composed largely of contractile cells.")

(subclass FatTissue Tissue)
(documentation FatTissue "Nonrigid &%Tissue that is composed largely of
fat cells.")

(subclass Noun Word)
(documentation Noun "One of the parts of speech.  The &%Class of &%Words
that conventionally denote &%Objects.")

(subclass Verb Word)
(documentation Verb "One of the parts of speech.  The &%Class of &%Words
that conventionally denote &%Processes.")

(subclass Adjective Word)
(documentation Adjective "One of the parts of speech.  The &%Class of
&%Words that conventionally denote &%Attributes of &%Objects.")

(subclass Adverb Word)
(documentation Adverb "One of the parts of speech.  The &%Class of &%Words
that conventionally denote &%Attributes of &%Processes.")

(subclass Particle Word)
(documentation Particle "An umbrella &%Class for any &%Word that does not
fit into the other subclasses of &%Word.  A &%Particle is generally a small
term that serves a grammatical or logical function, e.g. 'and', 'of',
'since', etc.  At some point, this class might be broken up into the
subclasses 'Connective', 'Preposition', etc.  Note that the class &%Particle
includes both personal and possessive pronouns, e.g. 'she', 'hers', 'it', 'its',
etc.")

(subclass Morpheme LinguisticExpression)
(documentation Morpheme "Part of a &%Word which cannot be subdivided
and which expresses a meaning.")

(=>
   (instance ?MORPH Morpheme)
   (not
      (exists (?OTHERMORPH)
         (and
            (instance ?OTHERMORPH Morpheme)
            (part ?OTHERMORPH ?MORPH)
            (not (equal ?OTHERMORPH ?MORPH))))))

(=>
   (instance ?MORPH Morpheme)
   (exists (?WORD)
         (and
            (instance ?WORD Word)
            (part ?MORPH ?WORD))))

(=>
    (instance ?WORD Word)
    (exists (?PART)
        (and
            (part ?PART ?WORD)
            (instance ?PART Morpheme))))

(subclass Phrase LinguisticExpression)
(disjointDecomposition Phrase VerbPhrase NounPhrase PrepositionalPhrase)
(documentation Phrase "A set of &%Words in a &%Language which form a unit,
i.e. express a meaning in the &%Language.")

(=>
    (instance ?PHRASE Phrase)
    (exists (?PART1 ?PART2)
        (and
            (part ?PART1 ?PHRASE)
	      (part ?PART2 ?PHRASE)
            (instance ?PART1 Word)
	      (instance ?PART2 Word)
            (not (equal ?PART1 ?PART2)))))

(subclass VerbPhrase Phrase)
(documentation VerbPhrase "A &%Phrase that has the same function as a
&%Verb.")

(=>
   (instance ?PHRASE VerbPhrase)
   (exists (?VERB)
      (and
         (instance ?VERB Verb)
         (part ?VERB ?PHRASE))))

(subclass NounPhrase Phrase)
(disjoint NounPhrase VerbPhrase)
(documentation NounPhrase "A &%Phrase that has the same function as a
&%Noun.")

(=>
    (instance ?SENTENCE Sentence)
    (exists (?PHRASE1 ?PHRASE2)
        (and
           (instance ?PHRASE1 NounPhrase)
           (instance ?PHRASE2 VerbPhrase)
           (part ?PHRASE1 ?SENTENCE)
           (part ?PHRASE2 ?SENTENCE))))

(=>
   (instance ?PHRASE NounPhrase)
   (exists (?NOUN)
      (and
         (instance ?NOUN Noun)
         (part ?NOUN ?PHRASE))))

(subclass PrepositionalPhrase Phrase)
(documentation PrepositionalPhrase "A &%Phrase that begins with a
preposition and that functions as an &%Adjective or an &%Adverb.")

(=>
   (instance ?PHRASE PrepositionalPhrase)
   (exists (?PREP)
      (and
         (instance ?PREP Particle)
         (part ?PREP ?PHRASE))))

(subclass Text LinguisticExpression)
(subclass Text Artifact)
(documentation Text "A &%LinguisticExpression or set of
&%LinguisticExpressions that perform a specific function related
to &%Communication, e.g. express a discourse about a particular
topic, and that are inscribed in a &%CorpuscularObject by &%Humans.")

(=>
    (instance ?TEXT Text)
    (exists (?PART)
        (and
            (part ?PART ?TEXT)
            (instance ?PART LinguisticExpression))))

(=>
   (instance ?TEXT Text)
   (exists (?WRITE)
      (and
         (instance ?WRITE Writing)
         (result ?WRITE ?TEXT))))

(subclass FactualText Text)
(disjoint FactualText FictionalText)
(documentation FactualText "The class of &%Texts that purport to
reveal facts about the world.  Such texts are often known as information
or as non-fiction.  Note that something can be an instance of
&%FactualText, even if it is wholly inaccurate.  Whether something
is a &%FactualText is determined by the beliefs of the agent creating
the text.")

(=>
   (and
      (instance ?TEXT FactualText)
      (authors ?AGENT ?TEXT)
      (subsumesContentInstance ?TEXT ?CONTENT)
      (instance ?CONTENT Formula))
   (believes ?AGENT ?CONTENT))

(subclass FictionalText Text)
(documentation FictionalText "The class of &%Texts that purport to
be largely a product of the author's imagination, i.e. the author
does not believe that most of the content conveyed by the text is
an accurate depiction of the real world.  Note that something can
be an instance of &%FictionalText, even if it is completely true.
Whether something is a &%FictionalText is determined by the beliefs
of the agent creating the text.")

(=>
   (and
      (instance ?TEXT FactualText)
      (authors ?AGENT ?TEXT))
   (exists (?CONTENT)
      (and
         (subsumesContentInstance ?TEXT ?CONTENT)
         (instance ?CONTENT Formula)
         (not (believes ?AGENT ?CONTENT)))))

(subclass Sentence LinguisticExpression)
(disjointDecomposition Sentence Statement Supposition Question Request Order)
(documentation Sentence "A syntactically well-formed formula of a
&%Language.  It includes, at minimum, a predicate and a subject (which
may be explicit or implicit), and it expresses a &%Proposition.")

(=>
   (instance ?SENT Sentence)
   (exists (?NOUN ?VERB)
      (and
         (instance ?NOUN NounPhrase)
         (instance ?VERB VerbPhrase)
         (part ?NOUN ?SENT)
         (part ?VERB ?SENT))))

(=>
    (instance ?SENT Sentence)
    (exists (?PROP)
        (and
            (instance ?PROP Proposition)
            (containsInformation ?SENT ?PROP))))

(instance authors BinaryPredicate)
(instance authors AsymmetricRelation)
(domain authors 1 Agent)
(domainSubclass authors 2 Text)
(documentation authors "(&%authors ?AGENT ?TEXT) means that ?AGENT is
creatively responsible for ?TEXT.  For example, Agatha Christie is
author of Murder_on_the_Orient_Express.")

(=>
     (authors ?AGENT ?TEXT)
     (exists (?PROCESS ?INSTANCE)
          (and
               (agent ?PROCESS ?AGENT)
               (instance ?INSTANCE ?TEXT)
               (result ?PROCESS ?TEXT))))

(instance editor BinaryPredicate)
(instance editor AsymmetricRelation)
(domain editor 1 Agent)
(domainSubclass editor 2 Text)
(documentation editor "(&%editor ?AGENT ?TEXT) means that ?AGENT is
an editor of ?TEXT.")

(instance publishes BinaryPredicate)
(instance publishes AsymmetricRelation)
(domain publishes 1 Organization)
(domainSubclass publishes 2 Text)
(documentation publishes "(&%publishes ?ORG ?TEXT) means that ?ORG
publishes ?TEXT.  For example, Bantam Books publishes Agatha Christie's
Murder_on_the_Orient_Express.")

(<=>
   (publishes ?ORG ?TEXT)
   (exists (?PUB)
      (and
         (instance ?PUB Publication)
         (agent ?PUB ?ORG)
         (patient ?PUB ?TEXT))))

(instance EditionFn BinaryFunction)
(instance EditionFn PartialValuedRelation)
(domainSubclass EditionFn 1 ContentBearingObject)
(domain EditionFn 2 PositiveInteger)
(rangeSubclass EditionFn ContentBearingObject)
(documentation EditionFn "A &%BinaryFunction that maps a type of text
(e.g. Agatha Christie's Murder_on_the_Orient_Express) and a number
to the edition of the text type corresponding to the number.")

(=>
   (and
      (equal (EditionFn ?TEXT ?INT1) ?EDITION1)
      (equal (EditionFn ?TEXT ?INT2) ?EDITION2)
      (greaterThan ?INT2 ?INT1)
      (instance ?PUB1 Publication)
      (instance ?PUB2 Publication)
      (patient ?PUB1 ?EDITION1)
      (patient ?PUB2 ?EDITION2)
      (date ?PUB1 ?DATE1)
      (date ?PUB2 ?DATE2))
   (before (EndFn ?DATE1) (EndFn ?DATE2)))

(=>
   (equal (EditionFn ?TEXT1 ?NUMBER) ?TEXT2)
   (subsumesContentClass ?TEXT1 ?TEXT2))

(instance SeriesVolumeFn BinaryFunction)
(instance SeriesVolumeFn PartialValuedRelation)
(domainSubclass SeriesVolumeFn 1 Series)
(domain SeriesVolumeFn 2 PositiveInteger)
(rangeSubclass SeriesVolumeFn Text)
(documentation SeriesVolumeFn "A &%BinaryFunction that maps a type of &%Series
(e.g. the Encyclopedia_Britannica or the Popular_Mechanics periodical) and a
number to the volumes of the text type designated by the number.")

(=>
   (and
      (subclass ?TEXT Periodical)
      (equal (SeriesVolumeFn ?TEXT ?INT1) ?VOLUME1)
      (equal (SeriesVolumeFn ?TEXT ?INT2) ?VOLUME2)
      (greaterThan ?INT2 ?INT1)
      (instance ?PUB1 Publication)
      (instance ?PUB2 Publication)
      (patient ?PUB1 ?VOLUME1)
      (patient ?PUB2 ?VOLUME2)
      (date ?PUB1 ?DATE1)
      (date ?PUB2 ?DATE2))
   (before (EndFn ?DATE1) (EndFn ?DATE2)))

(=>
   (equal (SeriesVolumeFn ?SERIES ?NUMBER) ?VOLUME)
   (subsumesContentClass ?SERIES ?VOLUME))

(instance PeriodicalIssueFn BinaryFunction)
(instance PeriodicalIssueFn PartialValuedRelation)
(domainSubclass PeriodicalIssueFn 1 Periodical)
(domain PeriodicalIssueFn 2 PositiveInteger)
(rangeSubclass PeriodicalIssueFn Periodical)
(documentation PeriodicalIssueFn "A &%BinaryFunction that maps a subclass of
&%Periodical and a number to all of the issues of the &%Periodical corresponding
to the number.")

(=>
   (equal (PeriodicalIssueFn ?PERIODICAL ?NUMBER) ?ISSUE)
   (subsumesContentClass ?PERIODICAL ?ISSUE))

(subclass Book Text)
(documentation Book "A &%Text that has pages and is bound.")

(subclass Summary Text)
(documentation Summary "A short &%Text that is a summary of another,
longer &%Text.")

(=>
   (instance ?TEXT Summary)
   (exists (?TEXT2)
      (and
         (instance ?TEXT2 Text)
         (subsumesContentInstance ?TEXT2 ?TEXT))))

(subclass Series Text)
(documentation Series "A &%Text consisting of multiple self-contained units.
Some examples are an encyclopedia containing a couple dozen volumes, a television
series made up of many episodes, a film serial, etc.")

(=>
   (instance ?SERIES Series)
   (exists (?BOOK1 ?BOOK2)
      (and
         (instance ?BOOK1 Book)
         (instance ?BOOK2 Book)
         (subsumesContentInstance ?SERIES ?BOOK1)
         (subsumesContentInstance ?SERIES ?BOOK2)
         (not (equal ?BOOK1 ?BOOK2)))))

(subclass Periodical Series)
(documentation Periodical "A &%Series whose elements are published separately
and on a periodic basis.")

(subclass Article Text)
(disjoint Article Book)
(documentation Article "A relatively short &%Text that either is unbound or is
bound with other &%Articles in a &%Book.")

(=>
   (and
      (instance ?ARTICLE1 Article)
      (instance ?BOOK Book)
      (subsumesContentInstance ?BOOK ?ARTICLE1))
   (exists (?ARTICLE2)
      (and
         (instance ?ARTICLE2 Article)
         (not (equal ?ARTICLE2 ?ARTICLE1))
         (subsumesContentInstance ?BOOK ?ARTICLE2))))

(subclass Certificate Text)
(documentation Certificate "A &%Text that confers a right or obligation
on the holder of the &%Certificate.  Note that the right or obligation
need not be a legal one, as in the case of an academic diploma that grants
certain privileges in the professional world.")

(=>
   (and
      (instance ?DOC Certificate)
      (possesses ?AGENT ?DOC))
   (exists (?PROC)
      (or
         (confersRight ?PROC ?DOC ?AGENT)
         (confersObligation ?PROC ?DOC ?AGENT))))

(subclass FinancialInstrument Certificate)
(documentation FinancialInstrument "A document having monetary value
or recording a monetary transaction")

(subclass Currency FinancialInstrument)
(partition Currency CurrencyBill CurrencyCoin)
(documentation Currency "Any element of the official currency of some
&%Nation.  This covers both &%CurrencyBills and &%CurrencyCoins.")

(=>
   (instance ?CURRENCY Currency)
   (exists (?MEASURE)
      (monetaryValue ?CURRENCY ?MEASURE)))

(subclass CurrencyBill Currency)
(documentation CurrencyBill "Any instance of &%Currency that is made
of paper.")

(=>
   (instance ?BILL CurrencyBill)
   (exists (?PAPER)
      (and
         (instance ?PAPER Paper)
         (part ?PAPER ?BILL))))

(subclass CurrencyCoin Currency)
(documentation CurrencyCoin "Any instance of &%Currency that is made
of &%Metal.")

(=>
   (instance ?COIN CurrencyCoin)
   (exists (?METAL)
      (and
         (subclass ?METAL Metal)
         (material ?METAL ?COIN))))

(subclass Patent Certificate)
(documentation Patent "A &%Certificate that expresses the content of an
invention that has been accorded legal protection by a governemental
entity.")

(subclass Molecule CompoundSubstance)
(documentation Molecule "A molecule is the smallest unit of matter of a
&%CompoundSubstance that retains all the physical and chemical properties
of that substance, e.g., Ne, H2, H2O.  A molecule is two or more &%Atoms
linked by a chemical bond.")

(=>
   (instance ?MOLE Molecule)
   (exists (?ATOM1 ?ATOM2)
      (and
         (instance ?ATOM1 Atom)
         (instance ?ATOM2 Atom)
         (part ?ATOM1 ?MOLE)
         (part ?ATOM2 ?MOLE)
         (not
            (equal ?ATOM1 ?ATOM2)))))

(subclass Artifact CorpuscularObject)
(documentation Artifact "A &%CorpuscularObject that is the product of a
&%Making.")

(<=>
   (instance ?ARTIFACT Artifact)
   (exists (?MAKING)
      (and
         (instance ?MAKING Making)
         (result ?MAKING ?ARTIFACT))))

(subclass Product Artifact)
(documentation Product "An &%Artifact that is produced by &%Manufacture and
that is intended to be sold.")

(=>
   (instance ?PRODUCT Product)
   (exists (?MANUFACTURE)
      (and
         (instance ?MANUFACTURE Manufacture)
         (result ?MANUFACTURE ?PRODUCT))))

(instance version BinaryPredicate)
(instance version AsymmetricRelation)
(instance version TransitiveRelation)
(domainSubclass version 1 Artifact)
(domainSubclass version 2 Artifact)
(documentation version "Some &%Artifacts have a life cycle with discrete
stages or versions.  (&%version ARTIFACT1 ARTIFACT2) means that ARTIFACT1
is a version of ARTIFACT2.  Note that this &%Predicate relates subclasses of
&%Artifact and not instances.")

(=>
    (version ?ARTIFACT1 ?ARTIFACT2)
    (subclass ?ARTIFACT1 ?ARTIFACT2))

;; The following part of the ontology will eventually encompass all
;; artifacts.  For the time being, it is mostly restricted to the content
;; of the Ontolingua ontology component-assemblies, which covers the types
;; of elements used to construct engineering systems.

(subclass StationaryArtifact Artifact)
(documentation StationaryArtifact "A &%StationaryArtifact is an &%Artifact
that has a fixed spatial location.  Most instances of this &%Class are
architectural works, e.g. the Eiffel Tower, the Great Pyramids, office towers,
single-family houses, etc.")

(=>
    (instance ?ARTIFACT StationaryArtifact)
    (exists (?PLACE)
       (holdsDuring (WhenFn ?ARTIFACT) (located ?ARTIFACT ?PLACE))))

(subclass Building StationaryArtifact)
(documentation Building "The Class of &%StationaryArtifacts which are
intended to house &%Humans and their activities.")

(=>
   (instance ?BUILDING Building)
   (exists (?HUMAN)
      (and
         (instance ?HUMAN Human)
         (or
            (inhabits ?HUMAN ?BUILDING)
            (exists (?ACT)
               (and
                  (agent ?ACT ?HUMAN)
                  (located ?ACT ?BUILDING)))))))

(subclass Room StationaryArtifact)
(disjoint Room Building)
(documentation Room "A &%properPart of a &%Building which is separated from
the exterior of the &%Building and/or other &%Rooms of the &%Building by walls.
Some &%Rooms may have a specific purpose, e.g. sleeping, bathing, cooking,
entertainment, etc.")

(=>
   (instance ?ROOM Room)
   (exists (?BUILD)
      (and
         (instance ?BUILD Building)
         (properPart ?ROOM ?BUILD))))

(subclass Residence StationaryArtifact)
(partition Residence PermanentResidence TemporaryResidence)
(documentation Residence "A &%Building or part of a &%Building which provides
some accomodation for sleeping.")

(=>
   (instance ?RESIDENCE Residence)
   (or
      (instance ?RESIDENCE House)
      (exists (?BUILDING)
         (and
            (instance ?BUILDING ResidentialBuilding)
            (part ?RESIDENCE ?BUILDING)))))

(subclass PermanentResidence Residence)
(documentation PermanentResidence "A &%Residence where people live, i.e.
where people have a &%home.")

(=>
   (instance ?RESIDENCE PermanentResidence)
   (exists (?PERSON)
      (home ?PERSON ?HOTEL)))

(subclass TemporaryResidence Residence)
(documentation TemporaryResidence "A &%Residence which is strictly temporary,
i.e. where no one makes his/her &%home.")

(=>
   (instance ?RESIDENCE TemporaryResidence)
   (not (exists (?PERSON)
      (home ?PERSON ?HOTEL))))

(subclass ResidentialBuilding Building)
(subclass ResidentialBuilding Residence)
(documentation ResidentialBuilding "A &%Building which provides some
accomodation for sleeping.  Note that this class does not cover just
permanent residences, e.g. &%Houses and condominium and apartment buildings,
but also temporary residences, e.g. hotels and dormitories.
&%ResidentialBuildings are also distinguished from &%CommercialBuildings,
which are intended to serve an organizational rather than a residential
function.")

(subclass Hotel ResidentialBuilding)
(subclass Hotel TemporaryResidence)
(subclass Hotel CommercialAgent)
(documentation Hotel "A &%ResidentialBuilding which provides temporary
accommodations to guests in exchange for money.")

(subclass SingleFamilyResidence PermanentResidence)
(documentation SingleFamilyResidence "A &%PermanentResidence which is
intended to be the &%home of a single &%SocialUnit.  This class covers
&%Houses, &%ApartmentUnits, and &%CondominiumUnits.")

(=>
   (instance ?RESIDENCE SingleFamilyResidence)
   (hasPurpose ?RESIDENCE (forall (?AGENT1 ?AGENT2)
                         (=>
                            (and
                               (home ?AGENT1 ?RESIDENCE)
                               (home ?AGENT2 ?RESIDENCE))
                            (exists (?UNIT)
                               (and
                                  (instance ?UNIT SocialUnit)
                                  (member ?AGENT1 ?UNIT)
                                  (member ?AGENT2 ?UNIT)))))))

(subclass ArtWork Artifact)
(documentation ArtWork "&%Artifacts that are created primarily for
aesthetic appreciation.  Note that this &%Class does not include
most examples of architecture, which belong under &%StationaryArtifact.")

(subclass RepresentationalArtWork ArtWork)
(subclass RepresentationalArtWork Icon)
(documentation RepresentationalArtWork "Any &%ArtWork that represents
something &%Physical.")

(subclass Fabric Artifact)
(disjoint Fabric StationaryArtifact)
(documentation Fabric "&%Artifacts that are created by weaving together
natural or synthetic fibers or by treating the skins of certain sorts of
&%Animals.  Note that this &%Class includes articles that are created by
stitching together various types of fabrics, e.g. bedspreads.  On the other
hand, &%Clothing is not a &%subclass of &%Fabric, because many clothing items
contain elements that are not fabrics.")

(subclass Clothing Artifact)
(disjoint Clothing StationaryArtifact)
(documentation Clothing "&%Artifact made out of fabrics and possibly other
materials that are used to cover the bodies of &%Humans.")

(=>
   (instance ?CLOTHING Clothing)
   (exists (?FABRIC)
      (and
         (instance ?FABRIC Fabric)
         (part ?FABRIC ?CLOTHING))))

(instance wears BinaryPredicate)
(domain wears 1 Animal)
(domain wears 2 Clothing)
(documentation wears "(&%wears ?AGENT ?CLOTHING) means that ?AGENT is wearing
the item of &%Clothing ?CLOTHING.")

(=>
   (wears ?AGENT ?CLOTHING)
   (located ?CLOTHING ?AGENT))

(subclass Device Artifact)
(documentation Device "A &%Device is an &%Artifact whose purpose is to
serve as an &%instrument in a specific subclass of &%Process.")

(=>
   (instance ?DEVICE Device)
   (exists (?PROC)
      (capability ?PROC instrument ?DEVICE)))

(=>
   (instance ?DEVICE Device)
   (exists (?PROC)
      (hasPurpose ?DEVICE (exists (?INST)
                             (and
                                (instance ?INST ?PROC)
                                (instrument ?INST ?DEVICE))))))

(subclass MusicalInstrument Device)
(documentation MusicalInstrument "A &%Device which is manipulated by a &%Human and whose purpose is to produce &%Music.")

(=>
   (instance ?INSTRUMENT MusicalInstrument)
   (capability Music instrument ?INSTRUMENT))

(subclass TransportationDevice Device)
(documentation TransportationDevice "A &%TransportationDevice is a &%Device
which serves as the &%instrument in a &%Transportation &%Process which carries
the &%patient of the &%Process from one point to another.")

(=>
   (instance ?DEVICE TransportationDevice)
   (capability Transportation instrument ?DEVICE))

(subclass Vehicle TransportationDevice)
(documentation Vehicle "&%Vehicle is the subclass of
&%TransportationDevices that transport passengers or goods
from one place to another by moving from one place to the other
with them, e.g., cars, trucks, ferries, and airplanes.  Contrast
with devices such as &%Pipelines, escalators, or supermarket
checkout belts, which carry items from one place to another by means
of a moving part, without the device removing from the origin to
the destination.")

(=>
	(and
		(instance ?TRANSPORT Vehicle)
		(instance ?MOVE Translocation)
		(instrument ?MOVE ?TRANSPORT)
		(origin ?MOVE ?FROM))
	(holdsDuring (BeginFn (WhenFn ?MOVE)) (located ?TRANSPORT ?FROM)))

(=>
	(and
		(instance ?TRANSPORT Vehicle)
		(instance ?MOVE Translocation)
		(instrument ?MOVE ?TRANSPORT)
		(destination ?MOVE ?TO))
	(holdsDuring (BeginFn (WhenFn ?MOVE)) (located ?TRANSPORT ?TO)))

(subclass MeasuringDevice Device)
(documentation MeasuringDevice "Any &%Device whose purpose is to measure a
&%PhysicalQuantity.")

(=>
   (instance ?DEVICE MeasuringDevice)
   (hasPurpose ?DEVICE (exists (?MEASURE)
                           (and
                               (instance ?MEASURE Measuring)
                               (instrument ?MEASURE ?DEVICE)))))

(subclass AttachingDevice Device)
(documentation AttachingDevice "A &%Device whose purpose is to attach one thing
to something else, e.g. nails, screws, buttons, etc.")

(=>
   (instance ?DEVICE AttachingDevice)
   (exists (?ATTACH)
      (and
         (instance ?ATTACH Attaching)
         (instrument ?ATTACH ?DEVICE))))

(subclass Weapon Device)
(documentation Weapon "The &%Class of &%Devices that are designed
primarily to damage or destroy &%Humans/&%Animals, &%StationaryArtifacts or
the places inhabited by &%Humans/&%Animals.")

(=>
   (instance ?WEAPON Weapon)
   (capability Damaging instrument ?WEAPON))

(=>
   (instance ?WEAPON Weapon)
   (hasPurpose ?WEAPON (exists (?DEST ?PATIENT)
                          (and
	 			     (instance ?DEST Damaging)
                             (patient ?DEST ?PATIENT)
                             (or
                                (instance ?PATIENT StationaryArtifact)
                                (instance ?PATIENT Animal)
                                (exists (?ANIMAL)
                                   (and
                                      (instance ?ANIMAL Animal)
                                      (inhabits ?ANIMAL ?PATIENT))))))))

(subclass Machine Device)
(documentation Machine "&%Machines are &%Devices that that have a
well-defined &%resource and &%result and that automatically convert
the &%resource into the &%result.")

(=>
   (instance ?MACHINE Machine)
   (forall (?PROC)
      (=>
         (instrument ?PROC ?MACHINE)
         (exists (?RESOURCE ?RESULT)
            (and
               (resource ?PROC ?RESOURCE)
               (result ?PROC ?RESULT))))))

(=>
   (instance ?MACHINE Machine)
   (exists (?COMP1 ?COMP2)
      (and
         (instance ?COMP1 EngineeringComponent)
         (instance ?COMP2 EngineeringComponent)
         (not (equal ?COMP1 ?COMP2))
         (part ?COMP1 ?MACHINE)
         (part ?COMP2 ?MACHINE))))

(subclass EngineeringComponent Device)
(documentation EngineeringComponent "A fundamental concept that applies
in many engineering domains.  An &%EngineeringComponent is an element of
a &%Device that is a physically whole object, such as one might
see listed as standard parts in a catalog.  The main difference betweeen
&%EngineeringComponents and arbitrary globs of matter is that
&%EngineeringComponents are object-like in a modeling sense.  Thus, an
&%EngineeringComponent is not an arbtrary subregion, but a part of a
system with a stable identity.")

(=>
   (instance ?COMP EngineeringComponent)
   (exists (?DEVICE)
      (and
         (instance ?DEVICE Device)
         (component ?COMP ?DEVICE))))

(subrelation engineeringSubcomponent properPart)
(domain engineeringSubcomponent 1 EngineeringComponent)
(domain engineeringSubcomponent 2 EngineeringComponent)
(documentation engineeringSubcomponent "(&%engineeringSubcomponent ?SUB
?SUPER) means that the &%EngineeringComponent ?SUB is structurally a
&%properPart ?SUPER.  This relation is an &%AsymmetricRelation, since
two &%EngineeringComponents cannot be subcomponents of each other.")

(instance connectedEngineeringComponents SymmetricRelation)
(instance connectedEngineeringComponents IrreflexiveRelation)
(subrelation connectedEngineeringComponents connected)
(domain connectedEngineeringComponents 1 EngineeringComponent)
(domain connectedEngineeringComponents 2 EngineeringComponent)
(documentation connectedEngineeringComponents "This is the most general
connection relation between &%EngineeringComponents.  If
(&%connectedEngineeringComponents ?COMP1 ?COMP2), then neither ?COMP1 nor
?COMP2 can be an &%engineeringSubcomponent of the other.  The relation
&%connectedEngineeringComponents is a &%SymmetricRelation; there is no
information in the direction of connection between two components.  It is
also an &%IrreflexiveRelation; no &%EngineeringComponent bears this relation
to itself.  Note that this relation does not associate a name or type
with the connection.")

(=>
   (connectedEngineeringComponents ?COMP1 ?COMP2)
   (and
      (not
         (engineeringSubcomponent ?COMP1 ?COMP2))
      (not
         (engineeringSubcomponent ?COMP2 ?COMP1))))

(=>
   (connectedEngineeringComponents ?COMP1 ?COMP2)
   (not
      (or
         (instance ?COMP1 EngineeringConnection)
         (instance ?COMP2 EngineeringConnection))))

(<=>
   (connectedEngineeringComponents ?COMP1 ?COMP2)
   (exists (?CONNECTION)
      (connectsEngineeringComponents ?CONNECTION ?COMP1 ?COMP2)))

(subclass EngineeringConnection EngineeringComponent)
(documentation EngineeringConnection "An &%EngineeringConnection is an
&%EngineeringComponent that represents a connection relationship between
two other &%EngineeringComponents.  It is a reification of the
&%Predicate &%connectedEngineeringComponents.  That means that whenever
this &%Predicate holds between two &%EngineeringComponents, there exists an
&%EngineeringConnection.  The practical reason for reifying a relationship
is to be able to attach other information about it. For example, one
might want to say that a particular connection is associated with some
shared parameters, or that it is of a particular type.
&%EngineeringConnections are &%EngineeringComponents and can therefore be
an &%engineeringSubcomponent of other &%EngineeringComponents.  However,
to provide for modular regularity in component systems,
&%EngineeringConnections cannot be connected.  For each pair of
&%EngineeringComponents related by &%connectedEngineeringComponents, there
exists at least one &%EngineeringConnection.  However, that object may not
be unique, and the same &%EngineeringConnection may be associated with
several pairs of &%EngineeringComponents.")

(=>
   (instance ?CONNECTION EngineeringConnection)
   (exists (?COMP1 ?COMP2)
      (connectsEngineeringComponents ?CONNECTION ?COMP1 ?COMP2)))

(subrelation connectsEngineeringComponents connects)
(domain connectsEngineeringComponents 1 EngineeringConnection)
(domain connectsEngineeringComponents 2 EngineeringComponent)
(domain connectsEngineeringComponents 3 EngineeringComponent)
(documentation connectsEngineeringComponents "&%connectsEngineeringComponents
is a &%TernaryPredicate that maps from an &%EngineeringConnection to the
&%EngineeringComponents it connects.  Since &%EngineeringComponents cannot
be connected to themselves and there cannot be an &%EngineeringConnection
without a &%connectedEngineeringComponents &%Predicate, the second and third
arguments of any &%connectsEngineeringComponents relationship will always be
distinct for any given first argument.")

;; This following part contains definitions and axioms relating to social
;; groups and the relations between them.

(subclass CommercialAgent Agent)
(documentation CommercialAgent "An &%Agent that provides products and/or
services for a fee with the aim of making a profit.")

(subclass Corporation CommercialAgent)
(subclass Corporation Organization)
(documentation Corporation "An &%Organization that has a special legal status
that allows a group of persons to act as a &%CommercialAgent and that insulates
the owners (shareholders) from many liabilities that might result from the
corporation's operation.")

(subclass Manufacturer Corporation)
(documentation Manufacturer "Any &%Corporation which manufactures &%Products.")

(=>
   (instance ?MANUFACTURER Manufacturer)
   (exists (?PLANT)
      (and
         (instance ?PLANT IndustrialPlant)
         (possesses ?MANUFACTURER ?PLANT))))

(=>
   (instance ?ORG Manufacturer)
   (hasPurpose (exists (?MANUFACTURE)
                  (and
                     (instance ?MANUFACTURE Manufacturing)
                     (instance ?MANUFACTURE CommercialService)
                     (agent ?MANUFACTURE ?ORG)))))

(subclass MercantileOrganization Corporation)
(documentation MercantileOrganization "Any &%Corporation which sells
physical goods to customers for a profit.")

(=>
   (instance ?ORG MercantileOrganization)
   (hasPurpose (exists (?SELL)
                  (and
                     (instance ?SELL Selling)
                     (instance ?SELL CommercialService)
                     (agent ?SELL ?ORG)))))

(subclass Group Collection)
(subclass Group Agent)
(documentation Group "A &%Collection of &%Agents, e.g. a flock
of sheep, a herd of goats, or the local Boy Scout troop.")

(=>
   (and
      (instance ?GROUP Group)
      (member ?MEMB ?GROUP))
   (instance ?MEMB Agent))

(subclass GroupOfPeople Group)
(documentation GroupOfPeople "Any &%Group whose &%members are
exclusively &%Humans.")

(=>
   (and
      (instance ?GROUP GroupOfPeople)
      (member ?MEMBER ?GROUP))
   (instance ?MEMBER Human))

(subclass AgeGroup Group)
(documentation AgeGroup "A &%Group whose &%members all have the same &%age.")

(=>
   (instance ?GROUP AgeGroup)
   (forall (?MEMB1 ?MEMB2 ?AGE1 ?AGE2)
      (=>
         (and
            (member ?MEMB1 ?GROUP)
            (member ?MEMB2 ?GROUP)
            (age ?MEMB1 ?AGE1)
            (age ?MEMB2 ?AGE2))
         (equal ?AGE1 ?AGE2))))

(subclass FamilyGroup Group)
(documentation FamilyGroup "A &%Group whose &%members bear
&%familyRelations to one another.")

(=>
   (instance ?GROUP FamilyGroup)
   (forall (?MEMB1 ?MEMB2)
      (=>
         (and
            (member ?MEMB1 ?GROUP)
            (member ?MEMB2 ?GROUP))
         (familyRelation ?MEMB1 ?MEMB2))))

(subclass SocialUnit Group)
(documentation SocialUnit "A group of people who all have the same &%home.")

(=>
   (instance ?UNIT SocialUnit)
   (exists (?HOME)
      (=>
         (member ?MEMBER ?UNIT)
         (home ?MEMBER ?HOME))))

(instance ImmediateFamilyFn UnaryFunction)
(domain ImmediateFamilyFn 1 Human)
(range ImmediateFamilyFn FamilyGroup)
(documentation ImmediateFamilyFn "(&%ImmediateFamilyFn ?PERSON) denotes the
immediate family of ?PERSON, i.e. the &%Group consisting of the &%parents of
?PERSON and anyone of whom ?PERSON is a &%parent.")

(=>
   (and
      (instance ?PERSON Human)
      (equal (ImmediateFamilyFn ?PERSON) ?FAMILY))
   (forall (?MEMBER)
      (<=>
         (member ?MEMBER ?FAMILY)
         (or
            (parent ?MEMBER ?PERSON)
            (parent ?PERSON ?MEMBER)))))

(instance familyRelation BinaryPredicate)
(instance familyRelation EquivalenceRelation)
(domain familyRelation 1 Organism)
(domain familyRelation 2 Organism)
(documentation familyRelation "A very general &%Predicate for biological
relationships. (&%familyRelation ?ORGANISM1 ?ORGANISM2) means that
?ORGANISM1 and ?ORGANISM2 are biologically derived from a common ancestor.")

(=>
   (familyRelation ?ORGANISM1 ?ORGANISM2)
   (exists (?ORGANISM3)
      (and
         (familyRelation ?ORGANISM3 ?ORGANISM1)
         (familyRelation ?ORGANISM3 ?ORGANISM2))))

(instance legalRelation BinaryPredicate)
(instance legalRelation SymmetricRelation)
(domain legalRelation 1 CognitiveAgent)
(domain legalRelation 2 CognitiveAgent)
(documentation legalRelation "(&%legalRelation ?AGENT1 ?AGENT2) means
there is a relationship involving legal obligations between ?AGENT1 and
?AGENT2.  Some examples include marriage, adoption, etc.")

(=>
   (legalRelation ?AGENT1 ?AGENT2)
   (exists (?DECLARE ?OBLIGATION)
      (and
         (instance ?DECLARE Declaring)
         (confersObligation ?OBLIGATION ?DECLARE ?AGENT1)
         (confersObligation ?OBLIGATION ?DECLARE ?AGENT2))))

(subrelation spouse legalRelation)
(instance spouse IrreflexiveRelation)
(instance spouse SymmetricRelation)
(domain spouse 1 Human)
(domain spouse 2 Human)
(documentation spouse "The relationship of marriage between two &%Humans.")

(subrelation husband spouse)
(instance husband AsymmetricRelation)
(instance husband IrreflexiveRelation)
(domain husband 1 Man)
(domain husband 2 Woman)
(inverse husband wife)
(documentation husband "(&%husband ?MAN ?WOMAN) means that ?MAN is the
husband of ?WOMAN.")

(subrelation wife spouse)
(instance wife AsymmetricRelation)
(instance wife IrreflexiveRelation)
(domain wife 1 Woman)
(domain wife 2 Man)
(documentation wife "(&%wife ?WOMAN ?MAN) means that ?WOMAN is the wife of
?MAN.")

(subclass EthnicGroup Group)
(documentation EthnicGroup "A &%Group whose &%members originate from
the same &%GeographicArea or share the same &%Language and/or cultural
practices.")

(subclass BeliefGroup Group)
(documentation BeliefGroup "A &%Group whose &%members share a belief or
set of beliefs.")

(=>
   (instance ?GROUP BeliefGroup)
   (exists (?BELIEF)
      (forall (?MEMB)
         (=>
            (member ?MEMB ?GROUP)
            (believes ?MEMB ?BELIEF)))))

(subclass Organization Group)
(subclass Organization CognitiveAgent)
(documentation Organization "An &%Organization is a corporate or similar
institution. The &%members of an &%Organization typically have a common
purpose or function. Note that this class also covers divisions, departments,
etc. of organizations.  For example, both the Shell Corporation and the
accounting department at Shell would both be instances of &%Organization.
Note too that the existence of an &%Organization is dependent on the existence
of at least one &%member (since &%Organization is a subclass of &%Collection).
Accordingly, in cases of purely legal organizations, a fictitious &%member
should be assumed.")

(=>
   (instance ?ORG Organization)
   (exists (?PURP)
      (forall (?MEMBER)
         (=>
            (member ?MEMBER ?ORG)
            (hasPurpose ?MEMBER ?PURP)))))

(=>
   (and
      (instance ?ORG Organization)
      (member ?AGENT ?ORG))
   (instance ?AGENT Agent))

(instance employs BinaryPredicate)
(domain employs 1 Organization)
(domain employs 2 CognitiveAgent)
(documentation employs "(&%employs ?ORG ?PERSON) means that ?ORG has
hired ?PERSON and currently retains ?PERSON, on a salaried or
contractual basis, to provide services in exchange for monetary
compensation.")

(=>
   (employs ?ORG ?PERSON)
   (member ?PERSON ?ORG))

(subclass PoliticalOrganization Organization)
(documentation PoliticalOrganization "An &%Organization that is a &%Government,
a &%subOrganization of a &%Government, or an &%Organization that is attempting
to bring about some sort of political change.")

(=>
   (instance ?POL PoliticalOrganization)
   (exists (?PROC)
      (and
         (instance ?PROC PoliticalProcess)
         (agent ?PROC ?POL))))

(subclass GovernmentOrganization Organization)
(documentation GovernmentOrganization "&%GovernmentOrganization is the
class of official &%Organizations that are concerned with the government
of a &%GeopoliticalArea at some level.  They may be a &%Government or the
&%subOrganization of a government.")

(<=>
   (instance ?ORG GovernmentOrganization)
      (or
	   (instance ?ORG Government)
	   (exists (?GOV)
	      (and
		   (instance ?GOV Government)
		   (subOrganization ?ORG ?GOV)))))

(subclass Government GovernmentOrganization)
(documentation Government "The ruling body of a &%GeopoliticalArea.")

(instance GovernmentFn UnaryFunction)
(domain GovernmentFn 1 GeopoliticalArea)
(range GovernmentFn Government)
(documentation GovernmentFn "(&%GovernmentFn ?AREA) denotes the
&%Government of the &%GeopoliticalArea ?AREA.  For example,
(&%GovernmentFn &%UnitedStates) denotes the Federal-level government of
the United States; (&%GovernmentFn &%PuertoRico) denotes the government of
the Commonwealth of Puerto Rico.")

(<=>
	(instance ?COUNTRY Nation)
	(instance (GovernmentFn ?COUNTRY) NationalGovernment))

(subclass MilitaryOrganization GovernmentOrganization)
(documentation MilitaryOrganization "Any heavily armed &%Organization
that is part of a &%Government and that is charged with representing the
&%Government in international conflicts.")

(subclass PoliceOrganization GovernmentOrganization)
(documentation PoliceOrganization "Any &%GovernmentOrganization
that is charged with domestic enforcement of the laws of the &%Government.")

(subclass JudicialOrganization Organization)
(documentation JudicialOrganization "&%JudicialOrganization is the class
of &%Organizations whose primary purpose is to render judgments according
to the statutes or regulations of a government or other organization.
Judicial bodies are not necessarily government organizations, for example,
those associated with sporting associations.")

(=>
	(and
		(instance ?ORG JudicialOrganization)
		(subOrganization ?ORG ?GOV)
		(instance ?GOV GovernmentOrganization))
	(instance ?ORG GovernmentOrganization))

(subclass EducationalOrganization Organization)
(documentation EducationalOrganization "A &%EducationalOrganization is
an institution of learning. Some examples are public and private K-12
schools, and colleges and universities.")

(subclass ReligiousOrganization Organization)
(subclass ReligiousOrganization BeliefGroup)
(documentation ReligiousOrganization "An &%Organization whose members
share a set of religious beliefs.")

(subrelation subOrganization subCollection)
(instance subOrganization IrreflexiveRelation)
(instance subOrganization TransitiveRelation)
(domain subOrganization 1 Organization)
(domain subOrganization 2 Organization)
(documentation subOrganization "(&%subOrganization ?ORG1 ?ORG2) means
that ?ORG1 is an &%Organization which is a proper part of the
&%Organization ?ORG2.")

(instance citizen BinaryPredicate)
(instance citizen AsymmetricRelation)
(domain citizen 1 Human)
(domain citizen 2 Nation)
(documentation citizen "(&%citizen ?PERSON ?NATION) means that the
&%Human ?PERSON is a citizen of &%Nation ?NATION.")

;; END FILE

;; <module>QUALITIES</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;
;;   QUALITIES   ;;
;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'MEREOTOPOLOGY'
;; INCLUDES 'PROCESSES'
;; INCLUDES 'OBJECTS'

(subclass FieldOfStudy Proposition)
(documentation FieldOfStudy "An academic or applied discipline with
recognized experts and with a core of accepted theory or practice.  Note
that &%FieldOfStudy is a &%subclass of &%Proposition, because a
&%FieldOfStudy is understood to be a body of abstract, informational
content, with varying degrees of certainty attached to each element of
this content.")

(subclass Procedure Proposition)
(documentation Procedure "A sequence-dependent specification.  Some
examples are &%ComputerPrograms, finite-state machines, cooking recipes,
musical scores, conference schedules, driving directions, and the scripts
of plays and movies.")

(subclass ComputerProgram Procedure)
(documentation ComputerProgram "A set of instructions in a computer
programming language that can be executed by a computer.")

(subclass Plan Procedure)
(documentation Plan "A specification of a sequence of &%Processes which
is intended to satisfy a specified purpose at some future time.")

(=>
    (and
       (instance ?PLAN Plan)
       (instance ?OBJ ContentBearingObject)
       (containsInformation ?OBJ ?PLAN))
    (exists (?PLANNING)
       (and
          (instance ?PLANNING Planning)
          (result ?PLANNING ?OBJ))))

(=>
    (instance ?PLAN Plan)
    (exists (?PURP)
        (hasPurpose ?PLAN ?PURP)))

(subclass Argument Proposition)
(documentation Argument "Any proposition which has the form of a deductive
or inductive argument, i.e. a set of premises which, it is claimed, imply
a conclusion.")

(=>
   (instance ?REASON Reasoning)
   (exists (?ARGUMENT)
      (and
         (instance ?ARGUMENT Argument)
         (realization ?REASON ?ARGUMENT))))

(=>
   (instance ?ARGUMENT Argument)
   (exists (?PREMISES ?CONCLUSION)
      (and
         (equal (PremisesFn ?ARGUMENT) ?PREMISES)
         (conclusion ?CONCLUSION ?ARGUMENT))))

(subclass DeductiveArgument Argument)
(partition DeductiveArgument ValidDeductiveArgument InvalidDeductiveArgument)
(documentation DeductiveArgument "An &%Argument which has the form of a
deduction, i.e. it is claimed that the set of &%premises &%entails the
&%conclusion.")

(subclass ValidDeductiveArgument DeductiveArgument)
(documentation ValidDeductiveArgument "A &%DeductiveArgument which is
valid, i.e. the set of &%premises in fact &%entails the &%conclusion.")

(=>
   (and
      (instance ?ARGUMENT ValidDeductiveArgument)
      (equal ?PREMISES (PremisesFn ?ARGUMENT))
      (conclusion ?CONCLUSION ?ARGUMENT))
   (exists (?FORMULA1 ?FORMULA2)
      (and
         (containsInformation ?FORMULA1 ?PREMISES)
         (containsInformation ?FORMULA2 ?CONCLUSION)
         (entails ?PREMISES ?CONCLUSION))))

(subclass InvalidDeductiveArgument DeductiveArgument)
(documentation InvalidDeductiveArgument "&%DeductiveArguments that are not
&%ValidDeductiveArguments, i.e. it is not the case that the set of &%premises
in fact &%entails the &%conclusion.")

(subclass Explanation DeductiveArgument)
(documentation Explanation "An &%Argument where the conclusion is an
observed fact and the premises are other facts which collectively imply
the conclusion.  Note that this is the they hypothetico-deductive model
of explanation.")

(instance premise BinaryPredicate)
(instance premise TotalValuedRelation)
(domain premise 1 Argument)
(domain premise 2 Proposition)
(documentation premise "(&%premise ?ARGUMENT ?PROPOSITION) means that the
&%Proposition ?PROPOSITION is an explicit assumption of the &%Argument
?ARGUMENT.")

(instance PremisesFn UnaryFunction)
(domain PremisesFn 1 Argument)
(range PremisesFn Proposition)
(documentation PremisesFn "(&%PremisesFn ?ARGUMENT) returns the complete
set of &%premises of the &%Argument ?ARGUMENT.")

(=>
   (and
      (instance ?ARGUMENT Argument)
      (equal ?PREMISES (PremisesFn ?ARGUMENT)))
   (<=>
      (subProposition ?PROPOSITION ?PREMISES)
      (premise ?ARGUMENT ?PROPOSITION)))

(instance conclusion BinaryPredicate)
(instance conclusion SingleValuedRelation)
(instance conclusion TotalValuedRelation)
(domain conclusion 1 Argument)
(domain conclusion 2 Proposition)
(documentation conclusion "(&%conclusion ?ARGUMENT ?PROPOSITION) means that
the &%Proposition ?PROPOSITION is the conclusion explicitly drawn from the
&%Argument ?ARGUMENT.  Note that it may or may not be the case that ?ARGUMENT
&%entails ?PROPOSITION.")

(instance consistent BinaryPredicate)
(instance consistent SymmetricRelation)
(domain consistent 1 Proposition)
(domain consistent 2 Proposition)
(documentation consistent "(&%consistent ?PROP1 ?PROP2) means that the two
&%Propositions ?PROP1 and ?PROP2 are consistent with one another, i.e. it
is possible for both of them to be true at the same time.")

(instance orientation SpatialRelation)
(instance orientation TernaryPredicate)
(domain orientation 1 Object)
(domain orientation 2 Object)
(domain orientation 3 PositionalAttribute)
(documentation orientation "A general &%Predicate for indicating how two
&%Objects are oriented with respect to one another.  For example,
(orientation ?OBJ1 ?OBJ2 North) means that ?OBJ1 is north of ?OBJ2, and
(orientation ?OBJ1 ?OBJ2 Vertical) means that ?OBJ1 is positioned
vertically with respect to ?OBJ2.")

(=>
   (and
      (orientation ?OBJ1 ?OBJ2 ?ATTR1)
      (contraryAttribute @ROW)
      (inList ?ATTR1 (ListFn @ROW))
      (inList ?ATTR2 (ListFn @ROW))
      (not (equal ?ATTR1 ?ATTR2)))
   (not
      (orientation ?OBJ1 ?OBJ2 ?ATTR2)))

(instance direction CaseRole)
(domain direction 1 Process)
(domain direction 2 DirectionalAttribute)
(documentation direction "(&%direction ?PROC ?ATTR) means that the
&%Process ?PROC is moving in the direction ?ATTR.  For example, one
would use this &%Predicate to represent the fact that Max is moving
&%North.")

(=>
   (holdsDuring ?TIME (direction ?PROC ?ATTR1))
   (forall (?ATTR2)
      (=>
         (holdsDuring ?TIME (direction ?PROC ?ATTR2))
         (equal ?ATTR2 ?ATTR1))))

(instance faces BinaryPredicate)
(domain faces 1 Object)
(domain faces 2 DirectionalAttribute)
(documentation faces "(&%faces ?OBJ ?DIRECTION) means that the front of
?OBJ (see &%FrontFn) is positioned towards the compass direction ?DIRECTION.
More precisely, it means that if a line were extended from the center of
?DIRECTION, the line would intersect with the front of ?OBJ before it
intersected with its back (see &%BackFn).")

(=>
   (holdsDuring ?TIME (faces ?PROC ?ATTR1))
   (forall (?ATTR2)
      (=>
         (holdsDuring ?TIME (faces ?PROC ?ATTR2))
         (equal ?ATTR2 ?ATTR1))))

(subclass TruthValue RelationalAttribute)
(documentation TruthValue "The &%Class of truth values, e.g. &%True and
&%False.  These are &%Attributes of &%Sentences and &%Propositions.")

(=>
   (and
      (property ?ITEM ?VALUE)
      (instance ?VALUE TruthValue))
   (or
      (instance ?ITEM Sentence)
      (instance ?ITEM Proposition)))

(instance True TruthValue)
(documentation True "The &%TruthValue of being true.")

(instance False TruthValue)
(contraryAttribute False True)
(documentation False "The &%TruthValue of being false.")

(instance Likely TruthValue)
(contraryAttribute Likely Unlikely)
(documentation Likely "The &%TruthValue of being probable, i.e. more likely than
not to be &%True.")

(=>
   (property ?FORMULA Likely)
   (greaterThan (ProbabilityFn (true ?FORMULA True)) (ProbabilityFn (true ?FORMULA False))))

(instance Unlikely TruthValue)
(documentation Unlikely "The &%TruthValue of being improbable, i.e. more likely
than not to be &%False.")

(=>
   (property ?FORMULA Unlikely)
   (greaterThan (ProbabilityFn (true ?FORMULA False)) (ProbabilityFn (true ?FORMULA True))))

(subrelation true property)
(domain true 1 Sentence)
(domain true 2 TruthValue)
(documentation true "The &%BinaryPredicate that relates a &%Sentence
to its &%TruthValue.")

(subclass PositionalAttribute RelationalAttribute)
(documentation PositionalAttribute "&%Attributes characterizing the
orientation of an &%Object, e.g. &%Vertical versus &%Horizontal, &%Left
versus &%Right etc.")

(subclass DirectionalAttribute PositionalAttribute)
(documentation DirectionalAttribute "The subclass of &%PositionalAttributes
that concern compass directions.")

(=>
   (and
      (orientation ?OBJ1 ?OBJ2 ?ATTR1)
      (instance ?ATTR1 DirectionalAttribute)
      (instance ?ATTR2 DirectionalAttribute)
      (not
         (equal ?ATTR1 ?ATTR2)))
   (not
      (orientation ?OBJ1 ?OBJ2 ?ATTR2)))

(=>
	(and
		(instance ?DIRECT DirectionalAttribute)
		(orientation ?OBJ1 ?OBJ2 ?DIRECT)
		(orientation ?OBJ2 ?OBJ3 ?DIRECT))
	(between ?OBJ1 ?OBJ2 ?OBJ33))

(instance North DirectionalAttribute)
(contraryAttribute North South East West)
(documentation North "The compass direction of &%North.")

(instance South DirectionalAttribute)
(documentation South "The compass direction of &%South.")

(<=>
   (orientation ?OBJ1 ?OBJ2 North)
   (orientation ?OBJ2 ?OBJ1 South))

(instance East DirectionalAttribute)
(documentation East "The compass direction of &%East.")

(instance West DirectionalAttribute)
(documentation West "The compass direction of &%West.")

(<=>
   (orientation ?OBJ1 ?OBJ2 East)
   (orientation ?OBJ2 ?OBJ1 West))

(instance Vertical PositionalAttribute)
(documentation Vertical "Attribute used to indicate that an &%Object
is positioned height-wise with respect to another &%Object.")

(<=>
   (orientation ?OBJ1 ?OBJ2 Vertical)
   (orientation ?OBJ2 ?OBJ1 Vertical))

(instance Horizontal PositionalAttribute)
(contraryAttribute Horizontal Vertical)
(documentation Horizontal "Attribute used to indicate that an &%Object
is positioned width-wise with respect to another &%Object.")

(<=>
   (orientation ?OBJ1 ?OBJ2 Horizontal)
   (orientation ?OBJ2 ?OBJ1 Horizontal))

(instance Above PositionalAttribute)
(contraryAttribute Above Below)
(documentation Above "This is a &%PositionalAttribute derived from the
up/down schema and not involving contact.  Note that this means directly
above, i.e., if one object is &%Above another object, then the projections
of the two objects overlap.")

(=>
   (orientation ?OBJ1 ?OBJ2 Above)
   (not
      (connected ?OBJ1 ?OBJ2)))

(instance Below PositionalAttribute)
(documentation Below "This &%PositionalAttribute is derived from the
up/down schema and may or may not involve contact.  Note that this means
directly below, i.e., if one object is &%Below another object, then the
projections of the two objects overlap.")

(<=>
   (orientation ?OBJ1 ?OBJ2 Below)
   (or
      (orientation ?OBJ2 ?OBJ1 On)
      (orientation ?OBJ2 ?OBJ1 Above)))

(instance Adjacent PositionalAttribute)
(documentation Adjacent "Used to assert that an object ?OBJ1 is close
to, near or abutting ?OBJ2.  This &%PositionalAttribute covers the
following common sense notions:  adjoins, abuts, is contiguous to,
is juxtaposed, and is close to.")

(<=>
   (orientation ?OBJ1 ?OBJ2 Adjacent)
   (or
      (orientation ?OBJ1 ?OBJ2 Near)
      (connected ?OBJ1 ?OBJ2)))

(instance Left PositionalAttribute)
(documentation Left "This &%PositionalAttribute is derived from the
left/right schema.  Note that this means directly to the left, so that,
if one object is to the left of another, then the projections of the
two objects overlap.")

(instance Right PositionalAttribute)
(contraryAttribute Right Left)
(documentation Right "This &%PositionalAttribute is derived from the
left/right schema.  Note that this means directly to the right, so that,
if one object is to the right of another, then the projections of the
two objects overlap.")

(<=>
   (orientation ?OBJ1 ?OBJ2 Right)
   (orientation ?OBJ2 ?OBJ1 Left))

(instance Near PositionalAttribute)
(documentation Near "The relation of common sense adjacency.  Note that, if
an object is &%Near another object, then the objects are not &%connected.")

(=>
   (orientation ?OBJ1 ?OBJ2 Near)
   (not
      (connected ?OBJ1 ?OBJ2)))

(=>
   (orientation ?OBJ1 ?OBJ2 Near)
   (orientation ?OBJ2 ?OBJ1 Near))

(instance On PositionalAttribute)
(documentation On "This is used to assert that an object is on top of
another object, and it is derived from the up/down schema and involves
contact.")

(=>
   (orientation ?OBJ1 ?OBJ2 On)
   (connected ?OBJ1 ?OBJ2))

(=>
   (orientation ?OBJ1 ?OBJ2 On)
   (located ?OBJ1 ?OBJ2))

(=>
   (orientation ?OBJ1 ?OBJ2 On)
   (not
      (orientation ?OBJ2 ?OBJ1 On)))

(subclass TimeZone RelationalAttribute)
(documentation TimeZone "An &%Attribute which is used to specify coordinates
in which time measures are uniform, i.e. all time devices are synchronized to
the same &%TimePositions.")

(instance CoordinatedUniversalTimeZone TimeZone)
(documentation CoordinatedUniversalTimeZone "A &%TimeZone which functions
as the standard time zone.  It is also known as Zulu time (in the military),
Greenwich Mean Time, and the Western European time zone.  Note that whenever
a &%TimeZone is not specified, the &%TimePosition is understood to be with
respect to the &%CoordinatedUniversalTimeZone.")

(instance PacificTimeZone TimeZone)
(documentation PacificTimeZone "A &%TimeZone that covers much of the
western part of the United States.")

(=>
   (equal (RelativeTimeFn ?TIME1 PacificTimeZone) ?TIME2)
   (equal ?TIME2 (AdditionFn ?TIME1 8)))

(instance MountainTimeZone TimeZone)
(documentation MountainTimeZone "A &%TimeZone that covers much of the
Rocky Mountain region of the United States.")

(=>
   (equal (RelativeTimeFn ?TIME1 MountainTimeZone) ?TIME2)
   (equal ?TIME2 (AdditionFn ?TIME1 7)))

(instance CentralTimeZone TimeZone)
(documentation CentralTimeZone "A &%TimeZone that covers much of the
midwestern United States.")

(=>
   (equal (RelativeTimeFn ?TIME1 CentralTimeZone) ?TIME2)
   (equal ?TIME2 (AdditionFn ?TIME1 6)))

(instance EasternTimeZone TimeZone)
(documentation EasternTimeZone "A &%TimeZone that covers much of the
eastern United States.")

(=>
   (equal (RelativeTimeFn ?TIME1 EasternTimeZone) ?TIME2)
   (equal ?TIME2 (AdditionFn ?TIME1 5)))

(instance RelativeTimeFn BinaryFunction)
(instance RelativeTimeFn TemporalRelation)
(instance RelativeTimeFn TotalValuedRelation)
(domain RelativeTimeFn 1 TimePosition)
(domain RelativeTimeFn 2 TimeZone)
(range RelativeTimeFn TimePosition)
(documentation RelativeTimeFn "A means of converting &%TimePositions
between different &%TimeZones.  (&%RelativeTimeFn ?TIME ?ZONE)
denotes the &%TimePosition in &%CoordinatedUniversalTime that is
contemporaneous with the &%TimePosition ?TIME in &%TimeZone ?ZONE.
For example, (&%RelativeTimeFn (&%MeasureFn 14 &%Hour) &%EasternTimeZone)
would return the value (&%MeasureFn 19 &%Hour).")

(subclass SocialRole RelationalAttribute)
(documentation SocialRole "The &%Class of all &%Attributes that
specify the position or status of a &%CognitiveAgent within an
&%Organization or other &%Group.")

(=>
   (and
      (attribute ?PERSON ?ATTRIBUTE)
      (instance ?ATTRIBUTE SocialRole))
   (instance ?PERSON Human))

(instance Unemployed SocialRole)
(documentation Unemployed "The &%Attribute of a &%CognitiveAgent when
he/she is unemployed.")

(<=>
   (forall (?ORG)
      (not (employs ?ORG ?PERSON)))
   (attribute ?PERSON Unemployed))

(subclass Position SocialRole)
(partition Position FullTimePosition PartTimePosition)
(documentation Position "A formal position of reponsibility within an &%Organization. Examples of &%Positions include president, laboratory director, senior researcher, sales representative, etc.")

(instance occupiesPosition TernaryPredicate)
(domain occupiesPosition 1 Human)
(domain occupiesPosition 2 Position)
(domain occupiesPosition 3 Organization)
(documentation occupiesPosition "(&%occupiesPosition ?PERSON ?POSITION ?ORG)
means that ?PERSON holds the &%Position ?POSITION at &%Organization ?ORG.
For example, (&%occupiesPosition &%TomSmith &%ResearchDirector
&%AcmeLaboratory) means that &%TomSmith is a research director at Acme Labs.")

(=>
	(occupiesPosition ?AGENT ?POSITION ?ORG)
	(attribute ?AGENT ?POSITION))

(<=>
   (employs ?ORG ?PERSON)
   (exists (?POSITION)
      (occupiesPosition ?PERSON ?POSITION ?ORG)))

(subclass NormativeAttribute RelationalAttribute)
(documentation NormativeAttribute "A &%Class containing all of the
&%Attributes that are specific to morality, legality, aesthetics,
etiquette, etc.  Many of these attributes express a judgement that
something ought or ought not to be the case.")

(instance modalAttribute BinaryPredicate)
(instance modalAttribute AsymmetricRelation)
(instance modalAttribute IrreflexiveRelation)
(subrelation modalAttribute property)
(domain modalAttribute 1 Formula)
(domain modalAttribute 2 NormativeAttribute)
(documentation modalAttribute "A &%BinaryRelation that is used to state the
normative force of a &%Proposition.  (&%modalAttribute ?FORMULA ?PROP) means
that the &%Proposition expressed by ?FORMULA has the &%NormativeAttribute
?PROP.  For example, (&%modalAttribute (&%exists (?ACT ?OBJ) (&%and
(&%instance ?ACT &%Giving) (&%agent ?ACT John) (&%patient ?ACT ?OBJ)
(&%destination ?ACT Tom))) &%Obligation) means that John is obligated to give
Tom something.")

(=>
   (and
      (modalAttribute ?FORMULA1 ?PROP)
      (entails ?FORMULA1 ?FORMULA2))
   (modalAttribute ?FORMULA2 ?PROP))

(=>
   (modalAttribute ?FORMULA Obligation)
   (exists (?AGENT)
      (holdsObligation ?FORMULA ?AGENT)))

(=>
   (modalAttribute ?FORMULA Permission)
   (exists (?AGENT)
      (holdsRight ?FORMULA ?AGENT)))

(=>
    (holdsRight ?FORMULA ?AGENT)
    (modalAttribute ?FORMULA Possibility))

(=>
    (holdsObligation ?FORMULA ?AGENT)
    (modalAttribute ?FORMULA Obligation))

(subclass SubjectiveAssessmentAttribute NormativeAttribute)
(disjoint SubjectiveAssessmentAttribute ObjectiveNorm)
(documentation SubjectiveAssessmentAttribute "The &%Class of &%NormativeAttributes
which lack an objective criterion for their attribution, i.e. the attribution of
these &%Attributes varies from subject to subject and even with respect to the
same subject over time.  This &%Class is, generally speaking, only used when
mapping external knowledge sources to the SUMO.  If a term from such a knowledge
source seems to lack objective criteria for its attribution, it is assigned to
this &%Class.")

(subclass ObjectiveNorm NormativeAttribute)
(documentation ObjectiveNorm "The &%Class of &%NormativeAttributes that are
associated with an objective criterion for their attribution, i.e. there is
broad consensus about the cases where these attributes are applicable.")

(subclass ContestAttribute ObjectiveNorm)
(documentation ContestAttribute "A &%Class containing all of the
&%Attributes that are specific to participants in a &%Contest.  Some
of these &%Attributes are winning, losing, won, lost, etc.")

(=>
   (and
      (property ?THING ?ATTR)
      (instance ?ATTR ContestAttribute))
   (exists (?CONTEST)
      (and
         (instance ?CONTEST Contest)
         (or
            (agent ?CONTEST ?THING)
            (patient ?CONTEST ?THING)
            (subProcess ?THING ?CONTEST)))))

(subclass AlethicAttribute ObjectiveNorm)
(documentation AlethicAttribute "A &%Class containing all of the &%Attributes
relating to the notions of possibility and necessity.")

(instance Possibility AlethicAttribute)
(documentation Possibility "Attribute that applies to &%Propositions that are
possible, i.e. true in at least one possible world.")

(instance Necessity AlethicAttribute)
(documentation Necessity "Attribute that applies to &%Propositions that are
necessary, i.e. true in every possible world.")

(<=>
   (modalAttribute ?FORMULA Necessity)
   (not (modalAttribute (not ?FORMULA) Possibility)))

(=>
   (modalAttribute ?FORMULA Necessity)
   (modalAttribute ?FORMULA Possibility))

(subclass DeonticAttribute ObjectiveNorm)
(documentation DeonticAttribute "A &%Class containing all of the &%Attributes
relating to the notions of permission, obligation, and prohibition.")

(instance Permission DeonticAttribute)
(documentation Permission "&%Attribute that applies to &%Propositions that an &%Agent is permitted, by some authority, to make true.")

(instance Obligation DeonticAttribute)
(documentation Obligation "&%Attribute that applies to &%Propositions that an &%Agent is required, by some authority, to make true.")

(<=>
   (modalAttribute ?FORMULA Obligation)
   (not (modalAttribute (not ?FORMULA) Permission)))

(=>
   (modalAttribute ?FORMULA Obligation)
   (modalAttribute ?FORMULA Permission))

(subAttribute Law Obligation)
(documentation Law "&%Attribute that applies to &%Propositions that are
required by a government or a branch of the government and that are enforced
with penalties for noncompliance.  These &%Propositions may be codified as
legislation or they may be more informal, as in the case of government policy.")

(subAttribute Promise Obligation)
(documentation Promise "&%Attribute that applies to &%Propositions that
an &%Agent promises to make true.  &%Promises may be implicit or explicit.
They may be expressed in a written or verbal or gestural manner.")

(=>
   (property ?ENTITY Promise)
      (or
         (property ?ENTITY Contract)
         (property ?ENTITY NakedPromise)))

(subAttribute Contract Promise)
(documentation Contract "&%Attribute that applies to &%Propositions where
something is promised in return, i.e. a reciprocal promise.")

(subAttribute PurchaseContract Contract)
(documentation PurchaseContract "A &%Contract between two &%Agents in
which one &%Agent agrees to render the other some good or service in
exchange for currency.")

(subAttribute ServiceContract Contract)
(documentation ServiceContract "A &%Contract where an &%Agent agrees to
perform a service for another &%Agent (usually for a price).")

(subAttribute Warranty ServiceContract)
(documentation Warranty "A &%Contract that states the cirumstances
under which defects in the product will be corrected for no charge.
A &%Warranty is usually limited to a length of time that is specified
in the &%Warranty itself.  A &%Warranty also includes information about
what is not covered and actions that invalidate the &%Warranty.")

(subAttribute NakedPromise Promise)
(contraryAttribute NakedPromise Contract)
(documentation NakedPromise "A &%Promise where nothing is promised in return, i.e. a nudum pactum.")

(subclass PhysicalState InternalAttribute)
(exhaustiveAttribute PhysicalState Solid Fluid Liquid Gas)
(documentation PhysicalState "The physical state of an &%Object.  There
are three reified instances of this &%Class:  &%Solid, &%Liquid, and &%Gas.
Physical changes are not characterized by the transformation of one
substance into another, but rather by the change of the form (physical
states) of a given substance.  For example, melting an iron nail yields a
substance still called iron.")

(instance Solid PhysicalState)
(contraryAttribute Solid Liquid Gas)
(documentation Solid "An &%Object has the &%Attribute of &%Solid if it
has a fixed shape and a fixed volume.")

(instance Fluid PhysicalState)
(documentation Fluid "&%Fluid is the &%PhysicalState attribute of an
&%Object that does not have a fixed shape and thus tends to flow or to
conform to the shape of a container.")

(instance Liquid PhysicalState)
(subAttribute Liquid Fluid)
(documentation Liquid "An &%Object has the &%Attribute of &%Liquid if
it has a fixed volume but not a fixed shape.")

(=>
   (instance ?OBJ Solution)
   (attribute ?OBJ Liquid))

(=>
   (and
      (instance ?MOTION LiquidMotion)
      (patient ?MOTION ?OBJ))
   (attribute ?OBJ Liquid))

(instance Gas PhysicalState)
(subAttribute Gas Fluid)
(documentation Gas "An &%Object has the &%Attribute of &%Gas if it has
neither a fixed volume nor a fixed shape.")

(<=>
   (instance ?OBJ Substance)
   (exists (?ATTR)
      (and
         (instance ?ATTR PhysicalState)
         (attribute ?OBJ ?ATTR))))

(=>
   (and
      (instance ?MOTION GasMotion)
      (patient ?MOTION ?OBJ))
   (attribute ?OBJ Gas))

(subclass PerceptualAttribute InternalAttribute)
(documentation PerceptualAttribute "Any &%Attribute whose presence is detected
by an act of &%Perception.")

(=>
   (and
      (instance ?PERCEPTION Perception)
      (patient ?PERCEPTION ?OBJ))
   (exists (?PROP)
      (and
         (instance ?PROP PerceptualAttribute)
         (attribute ?OBJ ?PROP))))

(subclass TasteAttribute PerceptualAttribute)
(documentation TasteAttribute "The &%Class of &%Attributes relating to
the taste of &%Objects.")

(=>
   (instance ?OBJ Food)
   (exists (?ATTR)
      (and
         (instance ?ATTR TasteAttribute)
         (attribute ?OBJ ?ATTR))))

(subclass OlfactoryAttribute PerceptualAttribute)
(documentation OlfactoryAttribute "The &%Class of properties that are
detectable by smell.")

(subclass VisualAttribute PerceptualAttribute)
(documentation VisualAttribute "The &%Class of visually discernible
properties.")

(instance Illuminated VisualAttribute)
(documentation Illuminated "The &%Attribute of &%Regions that are
illuminated to some degree, i.e. in which some shapes are visually
discernable.")

(instance Unilluminated VisualAttribute)
(contraryAttribute Unilluminated Illuminated)
(documentation Unilluminated "The &%Attribute of &%Regions that are
unilluminated, i.e in which no shapes are visually discernable.")

(subclass ColorAttribute VisualAttribute)
(documentation ColorAttribute "The &%Class of &%VisualAttributes
relating to the color of &%Objects.")

(subclass PrimaryColor ColorAttribute)
(documentation PrimaryColor "Colors which can be blended to form any
color and which cannot be derived from any other colors.")

(instance Red PrimaryColor)
(documentation Red "The &%Attribute of redness.")

(instance Blue PrimaryColor)
(documentation Blue "The &%Attribute of being blue in color.")

(instance Yellow PrimaryColor)
(documentation Yellow "The &%Attribute of being yellow in color.")

(instance White PrimaryColor)
(documentation White "The &%Attribute of being white in color.")

(instance Black PrimaryColor)
(documentation Black "The &%Attribute of being black in color.")

(instance Monochromatic ColorAttribute)
(documentation Monochromatic "An &%Object with this &%Attribute has
the same color on every part of its surface.")

(=>
   (and
      (attribute ?OBJ Monochromatic)
      (superficialPart ?PART ?OBJ)
      (attribute ?PART ?COLOR)
      (instance ?COLOR PrimaryColor))
   (forall (?ELEMENT)
      (=>
         (superficialPart ?ELEMENT ?OBJ)
         (attribute ?ELEMENT ?COLOR))))

(=>
   (instance ?OBJ Object)
   (or
      (attribute ?OBJ Monochromatic)
      (attribute ?OBJ Polychromatic)))

(instance Polychromatic ColorAttribute)
(contraryAttribute Polychromatic Monochromatic)
(documentation Polychromatic "An &%Object with this &%Attribute has
different colors on different parts of its surface.")

(=>
   (attribute ?OBJ Polychromatic)
   (exists (?PART1 ?PART2 ?COLOR1 ?COLOR2)
      (and
         (superficialPart ?PART1 ?OBJ)
         (superficialPart ?PART2 ?OBJ)
         (attribute ?PART1 ?COLOR1)
         (attribute ?PART2 ?COLOR2)
         (instance ?COLOR1 ColorAttribute)
         (instance ?COLOR2 ColorAttribute)
         (not (equal ?COLOR1 ?COLOR2)))))

(subclass ShapeAttribute InternalAttribute)
(documentation ShapeAttribute "Any &%Attribute that relates to the
shape of an &%Object.")

(instance Pliable ShapeAttribute)
(documentation Pliable "The shape of an &%Object with this &%Attribute
can be altered.")

(=>
   (exists (?CHANGE)
      (and
         (instance ?CHANGE ShapeChange)
         (patient ?CHANGE ?OBJ)))
   (attribute ?OBJ Pliable))

(instance Rigid ShapeAttribute)
(contraryAttribute Rigid Pliable)
(documentation Rigid "The shape of an &%Object with this &%Attribute
cannot be altered.")

(=>
   (instance ?OBJ SelfConnectedObject)
   (or
      (attribute ?OBJ Pliable)
      (attribute ?OBJ Rigid)))

(subclass TwoDimensionalAngle OpenTwoDimensionalFigure)
(documentation TwoDimensionalAngle "Any two &%OneDimensionalFigures (i.e.
straight lines) meeting at a single &%GeometricPoint.")

(subclass RightAngle TwoDimensionalAngle)
(documentation RightAngle "Any &%TwoDimensionalAngle that has the
&%angularMeasure of 90 &%AngularDegrees.")

(=>
   (instance ?ANGLE RightAngle)
   (angularMeasure ?ANGLE (MeasureFn 90 AngularDegree)))

(subclass ClosedTwoDimensionalFigure TwoDimensionalFigure)
(documentation ClosedTwoDimensionalFigure "Any &%TwoDimensionalFigure which
has a well defined interior and exterior.")

(subclass Polygon ClosedTwoDimensionalFigure)
(documentation Polygon "A &%ClosedTwoDimensionalFigure that is composed
exclusively of straight lines, i.e. &%OneDimensionalFigures.")

(=>
   (instance ?POLYGON Polygon)
   (=>
      (geometricPart ?PART ?POLYGON)
      (or
         (sideOfFigure ?PART ?POLYGON)
         (exists (?SIDE)
            (and
               (sideOfFigure ?SIDE ?POLYGON)
               (geometricPart ?PART ?SIDE))))))

(subclass Triangle Polygon)
(documentation Triangle "Any three-sided &%Polygon.")

(=>
   (instance ?TRIANGLE Triangle)
   (equal (CardinalityFn (KappaFn ?SIDE (sideOfFigure ?SIDE ?TRIANGLE))) 3))

(subclass Quadrilateral Polygon)
(documentation Quadrilateral "Any four-sided &%Polygon.")

(=>
   (instance ?QUAD Quadrilateral)
   (equal (CardinalityFn (KappaFn ?SIDE (sideOfFigure ?SIDE ?QUAD))) 4))

(subclass Rectangle Quadrilateral)
(documentation Rectangle "Any &%Quadrilateral whose angles are all
&%RightAngles.")

(=>
   (instance ?RECTANGLE Rectangle)
   (=>
      (angleOfFigure ?ANGLE ?RECTANGLE)
      (instance ?ANGLE RightAngle)))

(subclass Square Rectangle)
(documentation Square "Any &%Rectangle whose sides are all equal.")

(=>
   (instance ?SQUARE Square)
   (exists (?LENGTH)
      (forall (?SIDE)
         (=>
            (sideOfFigure ?SIDE ?SQUARE)
            (lineMeasure ?SIDE ?LENGTH)))))

(subclass Circle ClosedTwoDimensionalFigure)
(documentation Circle "The class of &%ClosedTwoDimensionalFigures such that
all &%GeometricPoints that make up the &%Circle are equidistant from a
single &%GeometricPoint, known as the center of the &%Circle.")

(=>
   (instance ?CIRCLE Circle)
   (exists (?RADIUS)
      (radius ?CIRCLE ?RADIUS)))

(subclass ThreeDimensionalFigure GeometricFigure)
(documentation ThreeDimensionalFigure "The class of &%GeometricFigures that
have position and an extension along three dimensions, viz. geometric solids
like polyhedrons and cylinders.")

(instance geometricPart BinaryPredicate)
(instance geometricPart PartialOrderingRelation)
(domain geometricPart 1 GeometricFigure)
(domain geometricPart 2 GeometricFigure)
(documentation geometricPart "(&%geometricPart ?PART ?WHOLE) means that the
&%GeometricFigure ?PART is part of the &%GeometricFigure ?WHOLE.")

(subrelation pointOfFigure geometricPart)
(domain pointOfFigure 1 GeometricPoint)
(domain pointOfFigure 2 GeometricFigure)
(documentation pointOfFigure "(&%pointOfFigure ?POINT ?FIGURE) means that
the &%GeometricPoint ?POINT is part of the &%GeometricFigure ?FIGURE.")

(subrelation sideOfFigure geometricPart)
(domain sideOfFigure 1 OneDimensionalFigure)
(domain sideOfFigure 2 GeometricFigure)
(documentation sideOfFigure "(&%sideOfFigure ?SIDE ?FIGURE) means that the
&%OneDimensionalFigure ?POINT is a side of the &%GeometricFigure ?FIGURE.")

(subrelation angleOfFigure geometricPart)
(domain angleOfFigure 1 TwoDimensionalAngle)
(domain angleOfFigure 2 GeometricFigure)
(documentation angleOfFigure "(&%angleOfFigure ?ANGLE ?FIGURE) means that
the &%TwoDimensionalAngle ?ANGLE is part of the &%GeometricFigure ?FIGURE.")

(instance pointOfIntersection TernaryPredicate)
(domain pointOfIntersection 1 OneDimensionalFigure)
(domain pointOfIntersection 2 OneDimensionalFigure)
(domain pointOfIntersection 3 GeometricPoint)
(documentation pointOfIntersection "(&%pointOfIntersection ?FIGURE1 ?FIGURE2 ?POINT) means that the two straight lines ?FIGURE1 and ?FIGURE2 meet at the point ?POINT.")

(=>
   (pointOfIntersection ?FIGURE1 ?FIGURE2 ?POINT)
   (and
      (pointOfFigure ?POINT ?FIGURE1)
      (pointOfFigure ?POINT ?FIGURE2)))

(instance parallel BinaryPredicate)
(domain parallel 1 OneDimensionalFigure)
(domain parallel 2 OneDimensionalFigure)
(documentation parallel "(&%parallel ?LINE1 ?LINE2) means that the
&%OneDimensionalFigures ?LINE1 and ?LINE2 are parallel to one another,
i.e. they are equidistant from one another at every point.")

(=>
   (parallel ?LINE1 ?LINE2)
   (not (exists (?POINT)
      (pointOfIntersection ?LINE1 ?LINE2 ?POINT))))

(instance angularMeasure BinaryPredicate)
(instance angularMeasure TotalValuedRelation)
(domain angularMeasure 1 TwoDimensionalAngle)
(domain angularMeasure 2 PlaneAngleMeasure)
(documentation angularMeasure "(&%angularMeasure ?ANGLE ?MEASURE) means that
the two-dimensional geometric angle ?ANGLE has the &%PlaneAngleMeasure of
?MEASURE.")

(instance lineMeasure BinaryPredicate)
(instance lineMeasure TotalValuedRelation)
(domain lineMeasure 1 OneDimensionalFigure)
(domain lineMeasure 2 LengthMeasure)
(documentation lineMeasure "(&%lineMeasure ?LINE ?MEASURE) means that the
straight line ?LINE has the &%LengthMeasure of ?MEASURE.")

(instance geometricDistance TernaryPredicate)
(instance geometricDistance SingleValuedRelation)
(instance geometricDistance TotalValuedRelation)
(domain geometricDistance 1 GeometricPoint)
(domain geometricDistance 2 GeometricPoint)
(domain geometricDistance 3 LengthMeasure)
(documentation geometricDistance "(&%geometricDistance ?POINT1 ?POINT2
?LENGTH) means that ?LENGTH is the distance between the two
&%GeometricPoints ?POINT1 and ?POINT2.")

(=>
   (geometricDistance ?POINT1 ?POINT2 ?LENGTH)
   (geometricDistance ?POINT2 ?POINT1 ?LENGTH))

(instance radius BinaryPredicate)
(instance radius SingleValuedRelation)
(instance radius TotalValuedRelation)
(domain radius 1 Circle)
(domain radius 2 LengthMeasure)
(documentation radius "(&%radius ?CIRCLE ?LENGTH) means that the radius of
the &%Circle ?CIRCLE has a length of ?LENGTH.")

(=>
   (radius ?CIRCLE ?RADIUS)
   (exists (?POINT)
      (forall (?PART)
         (=>
            (pointOfFigure ?PART ?CIRCLE)
            (geometricDistance ?PART ?POINT ?RADIUS)))))

(instance diameter BinaryPredicate)
(instance diameter SingleValuedRelation)
(instance diameter TotalValuedRelation)
(domain diameter 1 Circle)
(domain diameter 2 LengthMeasure)
(documentation diameter "&%BinaryPredicate that is used to state the measure of a circular &%Object from side to side.  (&%diameter ?CIRCLE ?LENGTH) means that the diameter of the &%Circle ?CIRCLE has a length of ?LENGTH.")

(=>
   (diameter ?CIRCLE ?LENGTH)
   (exists (?HALF)
      (and
         (radius ?CIRCLE ?HALF)
         (equal (MultiplicationFn ?HALF 2) ?LENGTH))))

(instance tangent BinaryPredicate)
(domain tangent 1 OneDimensionalFigure)
(domain tangent 2 Circle)
(documentation tangent "(&%tangent ?LINE ?CIRCLE) means that the straight line ?LINE is tangent to the &%Circle ?CIRCLE, i.e. ?LINE touches ?CIRCLE without intersecting it.")

(=>
   (tangent ?LINE ?CIRCLE)
   (exists (?POINT1)
      (and
         (pointOfFigure ?POINT1 ?LINE)
         (pointOfFigure ?POINT1 ?CIRCLE)
         (forall (?POINT2)
            (=>
               (and
                  (pointOfFigure ?POINT2 ?LINE)
                  (pointOfFigure ?POINT2 ?CIRCLE))
               (equal ?POINT1 ?POINT2))))))

(subclass TextureAttribute PerceptualAttribute)
(subclass TextureAttribute ShapeAttribute)
(documentation TextureAttribute "Any &%Attribute that characterizes the
texture of an &%Object.  Note that a &%TextureAttribute always applies
to the surface of an object whenever it applies to the object itself.")

(=>
   (and
      (instance ?ATTRIBUTE TextureAttribute)
      (attribute ?OBJ ?ATTRIBUTE)
      (surface ?SURFACE ?OBJ))
   (attribute ?SURFACE ?ATTRIBUTE))

(subclass SoundAttribute PerceptualAttribute)
(documentation SoundAttribute "Any &%Attribute that characterizes the
sound made by an &%Object.")

(subclass SaturationAttribute InternalAttribute)
(documentation SaturationAttribute "A &%Class of &%Attributes that specify, in
a qualitative manner, the extent of the presence of one kind of &%Object in
another kind of &%Object.")

(instance Dry SaturationAttribute)
(contraryAttribute Dry Damp)
(documentation Dry "An &%Attribute which indicates that the associated
&%Object contains no &%Liquid.")

(=>
   (attribute ?OBJ Dry)
   (not
      (exists (?SUBOBJ)
         (and
            (part ?SUBOBJ ?OBJ)
            (attribute ?SUBOBJ Liquid)))))

(instance Damp SaturationAttribute)
(documentation Damp "An &%Attribute which indicates that the associated
&%Object contains some &%Liquid.")

(instance Wet SaturationAttribute)
(subAttribute Wet Damp)
(documentation Wet "An &%Attribute which indicates that the
associated &%Object is fully saturated with a &%Liquid, i.e.
every part of the &%Object has a subpart which is a &%Liquid.")

(=>
   (attribute ?OBJ Wet)
   (forall (?PART)
      (=>
         (part ?PART ?OBJ)
         (exists (?SUBPART)
            (and
               (part ?SUBPART ?PART)
               (attribute ?SUBPART Liquid))))))

(subclass BreakabilityAttribute InternalAttribute)
(documentation BreakabilityAttribute "A &%subclass of &%Attributes for
characterizing the breakability of &%CorpuscularObjects.")

(instance Fragile BreakabilityAttribute)
(documentation Fragile "An &%Attribute which indicates that the
associated &%Object is very breakable.")

(instance Unbreakable BreakabilityAttribute)
(contraryAttribute Unbreakable Fragile)
(documentation Unbreakable "An &%Attribute which indicates that the
associated &%Object cannot be broken.")

(=>
   (attribute ?OBJ Unbreakable)
   (not (exists (?DAMAGE)
      (and
         (instance ?DAMAGE Damaging)
         (patient ?DAMAGE ?OBJ)))))

(subclass BiologicalAttribute InternalAttribute)
(documentation BiologicalAttribute "&%Attributes that apply specifically
to instances of &%Organism.")

(=>
    (and
        (attribute ?ORG ?ATT)
        (instance ?ATT BiologicalAttribute))
    (instance ?ORG Organism))

(subclass BodyPosition BiologicalAttribute)
(documentation BodyPosition "The class of &%Attributes expressing
configurations of bodies or parts of bodies of animals or humans,
e.g. standing, sitting, kneeling, lying down, etc.")

(=>
   (instance ?ANIMAL Animal)
   (or
      (exists (?MOTION)
         (and
            (instance ?MOTION BodyMotion)
            (agent ?MOTION ?ANIMAL)))
      (exists (?ATTR)
         (and
            (instance ?ATTR BodyPosition)
            (attribute ?ANIMAL ?ATTR)))))

(instance Standing BodyPosition)
(documentation Standing "The &%BodyPosition of being upright, i.e. being
fully extended and supported by nothing other than one's own feet.")

(=>
   (and
      (instance ?AMBULATE Ambulating)
      (agent ?AMBULATE ?AGENT))
   (attribute ?AGENT Standing))

(instance Sitting BodyPosition)
(documentation Sitting "The &%BodyPosition of being recumbent, i.e.
knees bent and back side supported.")

(instance Prostrate BodyPosition)
(documentation Prostrate "The &%BodyPosition of lying down, being in a
horizontal position.")

(subclass AnimacyAttribute BiologicalAttribute)
(exhaustiveAttribute AnimacyAttribute Living Dead)
(documentation AnimacyAttribute "&%Attributes that indicate whether an
&%Organism is alive or not.")

(instance Living AnimacyAttribute)
(documentation Living "This &%Attribute applies to &%Organisms that are
alive.")

(=>
   (and
      (instance ?ORGANISM Organism)
      (agent ?PROCESS ?ORGANISM))
   (holdsDuring (WhenFn ?PROCESS) (attribute ?ORGANISM Living)))

(instance Dead AnimacyAttribute)
(subAttribute Dead Unconscious)
(contraryAttribute Dead Living)
(documentation Dead "This &%Attribute applies to &%Organisms that are
not alive.")

(=>
   (instance ?ORG Organism)
   (exists (?ATTR)
      (and
         (instance ?ATTR AnimacyAttribute)
         (attribute ?ORG ?ATTR))))

(subclass SexAttribute BiologicalAttribute)
(exhaustiveAttribute SexAttribute Female Male)
(documentation SexAttribute "&%Attributes that indicate the sex of an
&%Organism.")

(instance Female SexAttribute)
(documentation Female "An &%Attribute indicating that an &%Organism is
female in nature.")

(=>
   (and
      (instance ?BODY ReproductiveBody)
      (part ?BODY ?ORG)
      (instance ?ORG Organism))
(attribute ?ORG Female))

(=>
   (instance ?WOMAN Woman)
   (attribute ?WOMAN Female))

(instance Male SexAttribute)
(contraryAttribute Male Female)
(documentation Male "An &%Attribute indicating that an &%Organism is
male in nature.")

(=>
   (instance ?ANIMAL Animal)
   (exists (?ATTR)
      (and
         (instance ?ATTR SexAttribute)
         (attribute ?ANIMAL ?ATTR))))

(=>
   (instance ?MAN Man)
   (attribute ?MAN Male))

(subclass DevelopmentalAttribute BiologicalAttribute)
(exhaustiveAttribute DevelopmentalAttribute FullyFormed NonFullyFormed)
(documentation DevelopmentalAttribute "&%Attributes that indicate the
stage of development of an &%Organism.")

(instance FullyFormed DevelopmentalAttribute)
(documentation FullyFormed "The stage of an &%Organism when it has reached
the end of its growth phase.")

(=>
   (attribute ?OBJ FullyFormed)
   (exists (?GROWTH)
      (and
         (instance ?GROWTH Growth)
         (experiencer ?GROWTH ?OBJ)
         (holdsDuring (BeginFn (WhenFn ?OBJ)) (attribute ?OBJ NonFullyFormed)))))

(instance NonFullyFormed DevelopmentalAttribute)
(contraryAttribute NonFullyFormed FullyFormed)
(successorAttribute NonFullyFormed FullyFormed)
(documentation NonFullyFormed "The stage of an &%Organism before it is
&%FullyFormed.")

(=>
   (instance ?ORG Organism)
   (exists (?ATTR)
      (and
         (instance ?ATTR DevelopmentalAttribute)
         (attribute ?ORG ?ATTR))))

(instance Larval DevelopmentalAttribute)
(subAttribute Larval NonFullyFormed)
(documentation Larval "Form of most &%Invertebrates, &%Amphibians, and
&%Fish immediately after they hatch.  This form is fundamentally unlike
the adult form, and metamorphosis is required to reach the latter form.")

(=>
   (holdsDuring ?TIME (attribute ?ORG Larval))
   (holdsDuring (PastFn ?TIME) (exists (?BIRTH) (and (instance ?BIRTH Birth) (experiencer ?BIRTH ?ORG)))))

(instance Embryonic DevelopmentalAttribute)
(subAttribute Embryonic NonFullyFormed)
(contraryAttribute Embryonic Larval)
(documentation Embryonic "The stage of an &%Organism or an
&%AnatomicalStructure that exists only before the &%Organism is born.
&%Mammals, for example, have this &%Attribute only prior to
their birth.")

(=>
   (attribute ?ORG Embryonic)
   (exists (?BODY)
      (and
         (instance ?BODY ReproductiveBody)
         (located ?ORG ?BODY))))

(=>
   (holdsDuring ?TIME (attribute ?ORG Embryonic))
   (holdsDuring ?TIME (not (exists (?BIRTH) (and (instance ?BIRTH Birth) (experiencer ?BIRTH ?ORG))))))

(subclass DiseaseOrSyndrome BiologicalAttribute)
(documentation DiseaseOrSyndrome "A &%BiologicalAttribute which qualifies
something that alters or interferes with a normal process, state or activity
of an &%Organism.  It is usually characterized by the abnormal functioning of
one or more of the host's systems, parts, or &%Organs.")

(subclass PsychologicalAttribute BiologicalAttribute)
(partition PsychologicalAttribute StateOfMind TraitAttribute)
(documentation PsychologicalAttribute "&%Attributes that characterize the mental
or behavioral life of an &%Organism.")

(=>
   (instance ?ATTR PsychologicalAttribute)
   (=>
      (holdsDuring ?TIME (attribute ?ORGANISM ?ATTR))
      (holdsDuring ?TIME (attribute ?ORGANISM Living))))

(=>
   (and
      (instance ?ATTR PsychologicalAttribute)
      (attribute ?AGENT ?ATTR))
   (instance ?AGENT SentientAgent))

(subclass StateOfMind PsychologicalAttribute)
(documentation StateOfMind  "The class &%StateOfMind is distinguished from
its complement &%TraitAttribute by the fact that instances of the former are
transient while instances of the latter are persistent features of a creature's behavioral/psychological make-up.")

(subclass EmotionalState StateOfMind)
(documentation EmotionalState "The &%Class of &%Attributes that denote emotional
states of &%Organisms.")

(subclass ConsciousnessAttribute StateOfMind)
(documentation ConsciousnessAttribute "&%Attributes that indicate whether
an &%Organism is conscious or the qualitative degree of consciousness of
an &%Organism.")

(<=>
   (and
      (instance ?AGENT SentientAgent)
      (attribute ?AGENT Living))
   (exists (?ATTR)
      (and
         (instance ?ATTR ConsciousnessAttribute)
         (attribute ?AGENT ?ATTR))))

(subAttribute Asleep Unconscious)
(documentation Asleep "This &%Attribute applies to &%Organisms that are
sleeping.")

(instance Unconscious ConsciousnessAttribute)
(contraryAttribute Unconscious Awake)
(documentation Unconscious "This &%Attribute applies to &%Organisms that
are unconscious.  An &%Organism may be &%Unconscious because it is &%Dead
or &%Asleep or because of a blow to the head, a drug, etc.")

(instance Awake ConsciousnessAttribute)
(documentation Awake "This &%Attribute applies to &%Organisms that are
neither &%Unconscious nor &%Asleep.")

(=>
   (or
      (attribute ?AGENT Asleep)
      (attribute ?AGENT Awake))
   (attribute ?AGENT Living))

(subclass TraitAttribute PsychologicalAttribute)
(documentation TraitAttribute "&%Attributes that indicate the the
behavior/personality traits of an &%Organism.")

(subclass PsychologicalDysfunction PsychologicalAttribute)
(subclass PsychologicalDysfunction DiseaseOrSyndrome)
(documentation PsychologicalDysfunction "A clinically significant
dysfunction whose major manifestation is behavioral or psychological.
These dysfunctions may have identified or presumed biological etiologies
or manifestations.")

;; END FILE

;; <module>Sequestered_Axioms</module>
;; BEGIN FILE


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;    Sequestered Axioms    ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;  This section is not a subontology of the SUMO.  It contains axioms that relate
;;  to other sections of the ontology but that should not be used by the inference
;;  engine, because they can be used to construct arbitrarily complex terms that often
;;  appear in proofs with unhelpful conclusions.  Before this file is loaded into the
;;  inference engine, the axioms in this section should be commented out.

(<=>
   (instance ?ENTITY (UnionFn ?CLASS1 ?CLASS2))
   (or
      (instance ?ENTITY ?CLASS1)
      (instance ?ENTITY ?CLASS2)))

(<=>
   (instance ?ENTITY (IntersectionFn ?CLASS1 ?CLASS2))
   (and
      (instance ?ENTITY ?CLASS1)
      (instance ?ENTITY ?CLASS2)))

(<=>
   (instance ?ENTITY (ComplementFn ?CLASS))
   (not
      (instance ?ENTITY ?CLASS)))

(=>
   (and
      (instance ?CLASS1 SetOrClass)
      (instance ?CLASS2 SetOrClass))
   (equal (RelativeComplementFn ?CLASS1 ?CLASS2) (IntersectionFn ?CLASS1 (ComplementFn ?CLASS2))))

(<=>
   (instance ?ENTITY (GeneralizedUnionFn ?SUPERCLASS))
   (exists (?CLASS)
      (and
         (instance ?CLASS ?SUPERCLASS)
         (instance ?ENTITY ?CLASS))))

(<=>
   (instance ?ENTITY (GeneralizedIntersectionFn ?SUPERCLASS))
   (forall (?CLASS)
         (=>
            (instance ?CLASS ?SUPERCLASS)
            (instance ?ENTITY ?CLASS))))

(<=>
   (instance ?SUBCLASS (PowerSetFn ?CLASS))
   (subclass ?SUBCLASS ?CLASS))

;; <module>MidLevel</module>
;;  BEGIN FILE

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;      MILO (MId-Level Ontology)  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;

;; This is the source file for the MILO (MId-Level Ontology), an ontology that
;; is being developed as a bridge between the abstract content of the SUMO and
;; the rich detail of the various Teknowledge domain ontologies.  The MILO is
;; at this point in time (April 2003) provisional and incomplete.  It will be
;; actively modified and greatly enlarged at least through the end of 2003.
;; Those who are interested in making use of this ontology are urged
;; to contact Adam Pease (apease@ks.teknowledge.com) or Ian Niles
;; (iniles@teknowledge.com) for the latest version.

;; The MILO (MId-Level Ontology) is copyrighted by Teknowledge (c)
;; 2003.  It is released under the GNU Public License
;; <http://www.gnu.org/copyleft/gpl.html>.  Users of this code also consent, by
;; use of this material, to credit Teknowledge in any writings, briefings,
;; publications, presentations, or other representations of any code or other
;; product which incorporates, builds on, or uses this material.


;; ===========
;; New Content
;; ===========

;; The following content (down to the header for "Elements Ontology") was
;; newly created for the MILO.

(subclass HumanCorpse Human)
(documentation HumanCorpse "A &%Human which is &%Dead.")

(<=>
   (instance ?CORPSE HumanCorpse)
   (and
      (instance ?CORPSE Human)
      (attribute ?CORPSE Dead)))

(subclass HumanSlave Human)
(documentation HumanSlave "A &%Human who is owned by someone else.")

(=>
   (instance ?SLAVE HumanSlave)
   (exists (?PERSON)
      (and
         (instance ?PERSON Human)
         (not (equal ?PERSON ?SLAVE))
         (possesses ?PERSON ?SLAVE))))

(subclass HumanAdult Human)
(documentation HumanAdult "The class of &%Humans that are 18 years of
age or older.")

(=>
   (and
      (instance ?ADULT HumanAdult)
      (age ?ADULT (MeasureFn ?NUMBER YearDuration)))
   (greaterThanOrEqualTo ?NUMBER 18))

(subclass HumanYouth Human)
(documentation HumanYouth "The class of &%Humans that are younger than
18 years of age.")

(=>
   (and
      (instance ?YOUTH HumanYouth)
      (age ?YOUTH (MeasureFn ?NUMBER YearDuration)))
   (lessThan ?NUMBER 18))

(subclass HumanChild HumanYouth)
(documentation HumanChild "A &%HumanYouth between birth and puberty, i.e a
&%Human who is &%NonFullyFormed.")

(=>
   (instance ?CHILD HumanChild)
   (attribute ?CHILD NonFullyFormed))

(=>
   (and
      (instance ?CHILD HumanChild)
      (age ?CHILD (MeasureFn ?NUMBER YearDuration)))
   (lessThanOrEqualTo ?NUMBER 14))

(subclass Teenager HumanYouth)
(documentation Teenager "A &%HumanYouth between puberty and the age of 20.")

(=>
   (and
      (instance ?TEEN Teenager)
      (age ?TEEN (MeasureFn ?NUMBER YearDuration)))
   (and
      (greaterThan ?NUMBER 12)
      (lessThan ?NUMBER 20)))

(subclass Boy HumanChild)
(subclass Boy Man)
(documentation Boy "A &%HumanChild who is &%Male.")

(subclass Girl HumanChild)
(subclass Girl Woman)
(documentation Girl "A &%HumanChild who is &%Female.")

(subclass HumanBaby HumanChild)
(documentation HumanBaby "A &%Human between birth and the first year of age.")

(=>
   (and
      (instance ?BABY HumanBaby)
      (age ?CHILD (MeasureFn ?NUMBER YearDuration)))
   (lessThanOrEqualTo ?NUMBER 1))

(subclass Stepping BodyMotion)
(documentation Stepping "The &%BodyMotion of extending one foot forward
and then bringing the other foot to the same lateral position as the
first leg.")

(=>
   (and
      (instance ?AMBULATE Ambulating)
      (agent ?AMBULATE ?AGENT))
   (attribute ?AGENT Standing))

(=>
   (instance ?AMBULATE Ambulating)
   (exists (?SUB)
      (and
         (subclass ?SUB Stepping)
         (forall (?INST)
            (<=>
               (instance ?INST ?SUB)
               (subProcess ?INST ?AMBULATE))))))

(subclass ReflectingLight RadiatingLight)
(documentation ReflectingLight "Those instances of &%RadiatingLight where the
&%instrument is not a light source, but is simply a surface which bends light
waves that come in contact with it.")

(subclass Lyrics Text)
(documentation Lyrics "Any &%Text which is intended to be sung.")

(=>
   (instance ?LYRIC Lyrics)
   (hasPurpose ?LYRIC (exists (?SING)
                         (and
                            (instance ?SING Singing)
                            (patient ?SING ?LYRIC)))))

(subclass InstrumentalMusic Music)
(documentation InstrumentalMusic "&%Music which is produced (at least in part)
by a &%MusicalInstrument.")

(=>
   (instance ?MUSIC InstrumentalMusic)
   (exists (?INSTRUMENT)
      (and
         (instance ?INSTRUMENT MusicalInstrument)
         (instrument ?MUSIC ?INSTRUMENT))))

(subclass Piano MusicalInstrument)
(documentation Piano "A &%MusicalInstrument with keys that, when pressed down,
activate hammers that, in turn, strike strings.")

(subclass MonophonicMusic Music)
(documentation MonophonicMusic "&%Music which has a single part, i.e. &%Music
which cannot be divided into two or more contemporaneous &%subProcesses which
are also instances of &%Music.")

(subclass PolyphonicMusic Music)
(documentation PolyphonicMusic "&%Music which has two or more parts, i.e. &%Music
which can be divided into two or more contemporaneous &%subProcesses which are
also instances of &%Music.")

(<=>
   (instance ?MUSIC PolyphonicMusic)
   (exists (?PART1 ?PART2)
      (and
         (instance ?MUSIC Music)
         (instance ?PART1 Music)
         (instance ?PART2 Music)
         (subProcess ?PART1 ?MUSIC)
         (subProcess ?PART2 ?MUSIC)
         (not (equal ?PART1 ?PART2))
         (cooccur ?PART1 ?MUSIC)
         (cooccur ?PART2 ?MUSIC))))

(subclass WrittenCommunication LinguisticCommunication)
(documentation WrittenCommunication "Any &%LinguisticCommunication where the
&%instrument is a &%Text, e.g. a letter, an email, a memo, etc.")

(=>
   (instance ?COMMUNICATE WrittenCommunication)
   (exists (?WRITE ?READ ?TEXT)
      (and
         (instance ?WRITE Writing)
         (instance ?READ Reading)
         (instance ?TEXT Text)
         (instrument ?COMMUNICATE ?TEXT)
         (result ?WRITE ?TEXT)
         (patient ?READ ?TEXT)
         (subProcess ?WRITE ?COMMUNICATE)
         (subProcess ?READ ?COMMUNICATE))))

(subclass Reminding Requesting)
(documentation Reminding "Any &%Requesting that is intended to cause a
&%Remembering of something.")

(=>
   (instance ?REMIND Reminding)
   (exists (?REMEMBER)
      (and
         (instance ?REMEMBER Remembering)
         (causes ?REMIND ?REMEMBER))))

(subclass Threatening Committing)
(documentation Threatening "Any &%Committing where the thing promised
is something that is deemed undesirable by the &%destination of the
&%Committing.")

(=>
   (and
      (instance ?THREATEN Threatening)
      (agent ?THREATEN ?AGENT)
      (patient ?THREATEN ?PROP)
      (destination ?THREATEN ?DEST))
  (not (desires ?DEST ?PROP)))

(subclass Punishing OrganizationalProcess)
(documentation Punishing "Any &%OrganizationalProcess where the &%agent
does something to the &%destination that the &%agent knows is undesirable
for the &%destination.")

(=>
   (and
      (instance ?PUNISH Punishing)
      (agent ?PUNISH ?AGENT)
      (patient ?PUNISH ?PROP)
      (destination ?PUNISH ?DEST))
  (knows ?AGENT (not (desires ?DEST ?PROP))))

(subclass Registering Stating)
(subclass Registering PoliticalProcess)
(documentation Registering "Submitting official paperwork in a government
agency, e.g. filing for divorce, making a legal claim against someone.")

(=>
   (instance ?ACTION LegalAction)
   (exists (?REGISTER)
      (and
         (instance ?REGISTER Registering)
         (subProcess ?REGISTER ?ACTION))))

(subclass Answering Stating)
(documentation Answering "Responding to a &%Questioning, i.e. trying to answer
someone's question.")

(=>
   (instance ?ANSWER Answering)
   (exists (?QUESTION)
      (and
         (instance ?QUESTION Questioning)
         (refers ?ANSWER ?QUESTION)
         (earlier (WhenFn ?QUESTION) (WhenFn ?ANSWER)))))

(subclass Arguing Stating)
(documentation Arguing "Any &%Stating which has the form of an &%Argument.")

(=>
   (instance ?ARGUE Arguing)
   (exists (?STATEMENT)
      (and
         (patient ?ARGUE ?STATEMENT)
         (instance ?STATEMENT Statement)
         (containsInformation ?STATEMENT ?ARGUMENT)
         (instance ?ARGUMENT Argument))))

(subclass StatingALie Stating)
(documentation StatingALie "Any &%Stating which is both &%False and believed
to be &%False by the &%agent of the &%Stating.")

(=>
   (and
      (instance ?STATE StatingALie)
      (agent ?STATE ?AGENT)
      (patient ?STATE ?STATEMENT))
   (and
      (true ?STATMENT False)
      (believes ?AGENT (true ?STATEMENT False))))

(subclass Founding Declaring)
(subclass Founding OrganizationalProcess)
(documentation Founding "Setting up an &%Organization.")

(=>
   (instance ?FOUND Founding)
   (exists (?ORG)
      (and
         (instance ?ORG Organization)
         (result ?FOUND ?ORG))))

(subclass Indicating Communication)
(subclass Indicating BodyMotion)
(documentation Indicating "Pointing out a person, place or thing with
one's hand or with an &%Artifact.")

(subclass Projectile Weapon)
(documentation Projectile "A missile, bullet, etc. that is fired from
a &%Weapon.")

(=>
   (instance ?PROJECTILE Projectile)
   (capability Shooting patient ?PROJECTILE))

(subclass ProjectileShell Container)
(documentation ProjectileShell "The outer casing of a &%Projectile.")

(=>
   (instance ?PROJECTILE Projectile)
   (exists (?SHELL)
      (and
         (instance ?SHELL ProjectileShell)
         (part ?SHELL ?PROJECTILE))))

(subclass Gun Weapon)
(partition Gun ArtilleryGun Firearm)
(documentation Gun "A &%Weapon that shoots a &%Projectile.")

(=>
   (instance ?GUN Gun)
   (capability Shooting instrument ?GUN))

(=>
   (instance ?SHOOT Shooting)
   (exists (?PROJECTILE ?GUN)
      (and
         (instance ?PROJECTILE Projectile)
         (patient ?SHOOT ?PROJECTILE)
         (instance ?GUN Gun)
         (instrument ?SHOOT ?GUN))))

(subclass GunStock EngineeringComponent)
(documentation GunStock "The part of a &%Gun that is placed against the
shoulder to absorb some of the recoil action when it is fired.")

(=>
   (instance ?STOCK GunStock)
   (exists (?GUN)
      (and
         (instance ?GUN Gun)
         (part ?STOCK ?GUN))))

(subclass ArtilleryGun Gun)
(documentation ArtilleryGun "A &%Gun that is too large to be carried and fired
by a single &%Human.  Typically, &%ArtilleryGuns are on wheels.")

(subclass Firearm Gun)
(partition Firearm Rifle Pistol)
(documentation Firearm "A &%Gun that is small enough to be carried and fired by
a single &%Human.")

(subclass Rifle Firearm)
(documentation Rifle "A &%Firearm with a long barrel that is intended to be fired
from the shoulder.")

(subclass Pistol Firearm)
(documentation Pistol "A &%Firearm that is intended to be aimed and fired with a
single hand.")

(subclass Manifold EngineeringComponent)
(documentation Manifold "A pipe which has several outlets for other pipes that flow
into or out of it.")

(subclass BirthControlDevice Device)
(documentation BirthControlDevice "&%Devices which permit sexual intercourse but
which reduce the likelihood of conception.")

(subclass SwitchDevice Device)
(documentation SwitchDevice "A &%Device which is capable of turning an
&%ElectricDevice on and off.")

(=>
   (instance ?DEVICE SwitchDevice)
   (exists (?PROC1 ?PROC2 ?ELECTRIC)
      (and
         (instrument ?PROC1 ?DEVICE)
         (causes ?PROC1 ?PROC2)
         (instrument ?PROC2 ?ELECTRIC)
         (instance ?ELECTRIC ElectricDevice))))

(subclass Transducer Device)
(documentation Transducer "A &%Device which is capable of converting one form of
energy into another.")

(subclass Aerator Device)
(documentation Aerator "A &%Device whose purpose is to mix &%Substances with
&%Air.")

(=>
   (instance ?AERATOR Aerator)
   (hasPurpose ?AERATOR (exists (?COMBINE)
                           (and
                              (instance ?COMBINE Combining)
                              (resource ?COMBINE ?AIR)
                              (instance ?AIR Air)
                              (instrument ?COMBINE ?AERATOR)))))

(subclass Filter Device)
(documentation Filter "A &%Device whose purpose is to remove part of a
&%Solution that is passed through the &%Filter.")

(=>
   (instance ?FILTER Filter)
   (hasPurpose ?FILTER (exists (?REMOVE ?SOLUTION)
                          (and
                             (instance ?REMOVE Removing)
                             (origin ?REMOVE ?SOLUTION)
                             (instance ?SOLUTION Solution)
                             (instrument ?REMOVE ?FILTER)))))

(subclass FileDevice Device)
(documentation FileDevice "A &%Device whose purpose is to make something
smoother.  For example, a nail file is used to even out the tips of one's
finger nails.")

(=>
   (instance ?DEVICE FileDevice)
   (capability SurfaceChange instrument ?DEVICE))

(subclass ElectricDevice Device)
(documentation ElectricDevice "Any &%Device that is powered by electricity.")

(subclass Radar ElectricDevice)
(documentation Radar "An &%ElectricDevice that emits and receives microwave
radiation for the purpose of locating and tracking distant objects.")

(=>
   (instance ?RADAR Radar)
   (hasPurpose ?RADAR (exists (?DISCOVER)
                         (and
                            (instance ?DISCOVER Discovering)
                            (instrument ?DISCOVER ?RADAR)))))

(subclass SecurityDevice Device)
(documentation SecurityDevice "A &%Device whose purpose is to protect people or
property from kidnappers and/or thieves.")

(subclass Lock SecurityDevice)
(documentation Lock "A &%Device, which, through a &%Key or a combination prevents
access to a &%Container or &%StationaryArtifact.")

(subclass Key SecurityDevice)
(documentation Key "A &%Device which opens and closes a &%Lock.")

(=>
   (instance ?KEY Key)
   (exists (?LOCK)
      (and
         (instance ?LOCK Lock)
         (capability Opening instrument ?LOCK)
         (capability Closing instrument ?LOCK))))

(subclass SecurityAlarm SecurityDevice)
(subclass SecurityAlarm ElectricDevice)
(documentation SecurityAlarm "A &%SecurityDevice that detects intrusions to
a &%StationaryArtifact and issues a warning of some sort.")

(subclass FiniteQuantity Quantity)
(documentation FiniteQuantity "Any &%Quantity that is limited or bounded in
magnitude.")

(subclass InfiniteQuantity Quantity)
(documentation InfiniteQuantity "Any &%Quantity that is not limited or bounded
in magnitude.")

(subclass Clock MeasuringDevice)
(documentation Clock "Any &%Device that measures and represents &%TimeDuration
or &%TimePosition.")

(=>
   (and
      (instance ?MEASURE Measuring)
      (result ?MEASURE ?QUANTITY)
      (instrument ?MEASURE ?CLOCK)
      (instance ?CLOCK Clock))
   (instance ?QUANTITY TimeMeasure))

(subclass Thermometer MeasuringDevice)
(documentation Thermometer "Any &%Device that measures and represents
&%TemperatureMeasure.")

(=>
   (and
      (instance ?MEASURE Measuring)
      (result ?MEASURE ?QUANTITY)
      (instrument ?MEASURE ?THERMOMETER)
      (instance ?THERMOMETER Thermometer))
   (instance ?QUANTITY TemperatureMeasure))

(subclass Telephone ElectricDevice)
(subclass Telephone CommunicationDevice)
(documentation Telephone "A &%Device that permits &%LinguisticCommunication
between remote points by converting sound into electrical signals that are
then transmitted.  When the signals are received, they are converted back
into sound.")

(subrelation telephoneNumber uniqueIdentifier)
(domain telephoneNumber 1 SymbolicString)
(domain telephoneNumber 2 Agent)
(relatedInternalConcept telephoneNumber address)
(documentation telephoneNumber "(&%telephoneNumber ?NUMBER ?AGENT) means
that ?NUMBER is a telephone number at which ?AGENT can be regularly contacted.")

(subclass LightFixture Device)
(documentation LightFixture "Any &%Device whose purpose is to be a source of
visible light.")

(=>
   (instance ?FIXTURE LightFixture)
   (capability RadiatingLight instrument ?FIXTURE))

(subclass PaintedPicture ArtWork)
(documentation PaintedPicture "Any &%ArtWork which is produced by &%Painting.")

(subclass Sketch ArtWork)
(documentation Sketch "Any &%ArtWork which is produced by a pencil or
piece of charcoal.")

(subclass Collage ArtWork)
(subclass Collage (ComplementFn RepresentationalArtWork))
(documentation Collage "Any abstract &%ArtWork that is produced by arranging
bits of paper or photographs.")

(subclass Painting Covering)
(subclass Painting Coloring)
(documentation Painting "The application of &%Paint to a &%surface.  Note that
this class covers both &%ArtPainting (the creation of &%PaintedPictures), as
well as painting one's kitchen, for example.")

(=>
   (and
      (instance ?PAINT Painting)
      (patient ?PAINT ?SURFACE)
      (instrument ?PAINT ?STUFF))
   (exists (?OBJ)
      (and
         (surface ?SURFACE ?OBJ)
         (instance ?STUFF Paint))))

(subclass Paint Solution)
(documentation Paint "Any &%Solution which is capable of &%Coloring something.")

(=>
   (instance ?PAINT Paint)
   (capability Coloring instrument ?PAINT))

(subclass ArtPainting ContentDevelopment)
(subclass ArtPainting Painting)
(documentation ArtPainting "Any &%ContentDevelopment that results in a
&%PaintedPicture.")

(=>
   (instance ?PAINT ArtPainting)
   (exists (?PICTURE)
      (and
         (instance ?PICTURE PaintedPicture)
         (result ?PAINT ?PICTURE))))

(subclass Drawing ContentDevelopment)
(subclass Drawing SurfaceChange)
(documentation Drawing "Any &%ContentDevelopment that results in a &%Sketch.")

(=>
   (instance ?DRAW Drawing)
   (exists (?SKETCH)
      (and
         (instance ?SKETCH Sketch)
         (result ?DRAW ?SKETCH))))

(subclass DisplayBoard Artifact)
(documentation DisplayBoard "A large board for posting information so
that it can be disseminated to the public.")

(=>
   (instance ?BOARD DisplayBoard)
   (hasPurpose ?BOARD (exists (?PUT ?DISSEMINATE ?INFO)
                         (and
                            (instance ?PUT Putting)
                            (instance ?DISSEMINATE Disseminating)
                            (instance ?INFO ContentBearingObject)
                            (patient ?PUT ?INFO)
                            (patient ?DISSEMINATE ?INFO)
                            (destination ?PUT ?BOARD)))))

(subclass Wheel Artifact)
(documentation Wheel "A circular &%Artifact which is a component of
&%LandVehicles and of some &%Devices.")

(=>
   (instance ?VEHICLE LandVehicle)
   (exists (?WHEEL)
      (and
         (instance ?WHEEL Wheel)
         (part ?WHEEL ?VEHICLE))))

(subclass Paper Artifact)
(documentation Paper "An &%Artifact made of cellulose pulp that is intended
to contain a &%Text.")

(=>
   (instance ?PAPER Paper)
   (hasPurpose ?PAPER (exists (?TEXT)
                         (and
                            (instance ?TEXT Text)
                            (part ?TEXT ?PAPER)))))

(subclass Wire Artifact)
(documentation Wire "A long, thin strand of &%Metal that is used in a wide
range of applications, including the wiring of electrical systems, creating
bundles and the construction of cages.")

(=>
   (instance ?WIRE Wire)
   (material Metal ?WIRE))

(subclass Plug Artifact)
(documentation Plug "An &%Artifact which is designed to fit snugly within
a &%Hole.")

(=>
   (instance ?PLUG Plug)
   (exists (?HOLE)
      (completelyFills ?PLUG ?HOLE)))

(subclass CigarOrCigarette Artifact)
(documentation CigarOrCigarette "A tube of thin paper containing finely ground tobacco
that is smoked.")

(subclass Pottery Artifact)
(documentation Pottery "Household &%Artifacts that are made out of baked &%Clay.")

(=>
   (instance ?POTTERY Pottery)
   (exists (?CLAY)
      (and
         (instance ?CLAY Clay)
         (part ?CLAY ?POTTERY))))

(subclass Furniture Artifact)
(disjoint Furniture Device)
(documentation Furniture "Any free-standing &%Artifacts which are not
&%Devices and which are used in day-to-day living.")

(subclass Seat Furniture)
(documentation Seat "Any instance of &%Furniture which is designed to
accommodate &%Humans who are &%Sitting.")

(=>
   (instance ?SEAT Seat)
   (hasPurpose ?SEAT (exists (?PERSON)
                        (and
                           (instance ?PERSON Human)
                           (located ?PERSON ?SEAT)
                           (attribute ?PERSON Sitting)))))

(subclass Chair Seat)
(documentation Chair "A &%Seat that is designed to accommodate a single
&%Human.")

(=>
   (instance ?CHAIR Chair)
   (not (exists (?PERSON1 ?PERSON2)
      (and
         (instance ?PERSON1 Human)
         (instance ?PERSON2 Human)
         (attribute ?PERSON1 Sitting)
         (attribute ?PERSON2 Sitting)
         (located ?PERSON1 ?CHAIR)
         (located ?PERSON2 ?CHAIR)
         (not (equal ?PERSON1 ?PERSON2))))))

(subclass Bed Furniture)
(documentation Bed "A piece of &%Furniture which is primarily for sleeping.")

(=>
   (instance ?BED Bed)
   (hasPurpose ?BED (exists (?PERSON)
                       (and
                          (attribute ?PERSON Asleep)
                          (located ?PERSON ?BED)))))

(subclass Table Furniture)
(documentation Table "A piece of &%Furniture with four legs and a flat top.
It is used either for eating, paperwork or meetings.")

(subclass Desk Table)
(documentation Desk "A &%Table for a single person which is intended to be
used for paperwork.")

(subclass Screw AttachingDevice)
(documentation Screw "An &%AttachingDevice which contains a spiral of grooves to
hold it in place and which is fastened with a screwdriver.")

(subclass Tape AttachingDevice)
(documentation Tape "A thin strip of &%Fabric or &%Paper that is used to attach
two things.")

(=>
   (instance ?TAPE Tape)
   (exists (?PART)
      (and
         (part ?PART ?TAPE)
         (or
            (instance ?PART Paper)
            (instance ?PART Fabric)))))

(subclass Holder Device)
(documentation Holder "A large class of &%Devices whose purpose is to hold
something else, i.e. be the &%instrument of a &%Keeping.")

(=>
   (instance ?DEVICE Holder)
   (capability Keeping instrument ?DEVICE))

(subclass Saddle Holder)
(documentation Saddle "A &%Device which allows a &%Human to ride on a
&%Horse.")

(=>
   (instance ?SADDLE Saddle)
   (capability (KappaFn ?RIDE (and
                                 (instance ?RIDE Carrying)
                                 (patient ?RIDE ?HUMAN)
                                 (instance ?HUMAN Human)
                                 (agent ?RIDE ?HORSE)
                                 (instance ?HORSE Horse))) instrument ?SADDLE))

(subclass Tray Holder)
(documentation Tray "A &%Holder that is designed for &%Food, dishes, and
flatware.")

(subclass Container Holder)
(documentation Container "Any &%Holder whose purpose is to contain
something else.  Note that &%Container is more specific in meaning
than &%Holder, because a &%Container must have a &%Hole that is at
least partially filled by the thing contained.")

(=>
   (instance ?CONTAINER Container)
   (hasPurpose ?CONTAINER (exists (?OBJ) (contains ?CONTAINER ?OBJ))))

(subclass Box Container)
(documentation Box "Any six-sided &%Container whose sides are
rectangular in shape.")

(=>
   (instance ?BOX Box)
   (equal (CardinalityFn (KappaFn ?SIDE (or
                                           (top ?SIDE ?BOX)
                                           (bottom ?SIDE ?BOX)
                                           (side ?SIDE ?BOX)))) 6))

(subclass TravelContainer Container)
(documentation TravelContainer "Any &%Container which is intended to be
used for carrying clothing, toiletries, and other personal effects that
would be needed on a overnight trip.")

(subclass FluidContainer Container)
(documentation FluidContainer "A &%Container which is used to store &%Fluids, i.e. &%Liquids and &%Gases.")

(=>
   (and
      (instance ?TANK TankContainer)
      (contains ?TANK ?STUFF))
   (attribute ?STUFF Fluid))

(subclass Bottle FluidContainer)
(documentation Bottle "A &%Container whose top is narrower than its bottom, which has no handle, and which is intended to store &%Liquids.")

(=>
   (and
      (instance ?BOTTLE Bottle)
      (contains ?BOTTLE ?STUFF))
   (attribute ?STUFF Liquid))

(=>
   (and
      (instance ?BOTTLE Bottle)
      (bottom ?BOTTOM ?BOTTLE)
      (top ?TOP ?BOTTLE)
      (width ?BOTTOM ?WIDTH1)
      (width ?TOP ?WIDTH2))
   (lessThan ?WIDTH2 ?WIDTH1))

(subclass Cup FluidContainer)
(documentation Cup "An open &%FluidContainer that is intended to serve a &%Beverage to a single person.  Note that this class includes both cups with handles and drinking glasses.")

(=>
   (and
      (instance ?CUP Cup)
      (contains ?CUP ?STUFF))
   (instance ?STUFF Beverage))

(subclass BoardOrBlock Artifact)
(documentation BoardOrBlock "A piece of material with flat, rectangular sides.
Note that boards and blocks are lumped into a single concept, because the
difference between these notions cannot be precisely defined.")

(=>
   (instance ?BOARD BoardOrBlock)
   (capability Constructing resource ?BOARD))

(subclass Nest CorpuscularObject)
(documentation Nest "Any structure which is created by nonhuman &%Animals for
the purpose of giving birth to their offspring.")

(=>
   (instance ?NEST Nest)
   (hasPurpose ?NEST (exists (?BIRTH)
                        (and
                           (instance ?BIRTH Birth)
                           (located ?BIRTH ?NEST)))))

(subclass OutdoorClothing Clothing)
(documentation OutdoorClothing "&%Clothing that is intended to be worn
outdoors.")

(=>
   (and
      (instance ?CLOTHING OutdoorClothing)
      (holdsDuring ?TIME (wears ?PERSON ?CLOTHING)))
   (not (exists (?BUILDING)
      (and
         (instance ?BUILDING Building)
         (holdsDuring ?TIME (located ?PERSON ?BUILDING))))))

(subclass Hat OutdoorClothing)
(documentation Hat "A type of &%Clothing that is worn on the &%Head.  Note
that this class covers caps, bonnets, berets, etc.")

(=>
   (and
      (wears ?PERSON ?HAT)
      (instance ?HAT Hat))
   (exists (?HEAD)
      (and
         (instance ?HEAD Head)
         (part ?HEAD ?PERSON)
         (meetsSpatially ?HAT ?HEAD))))

(subclass Coat OutdoorClothing)
(documentation Coat "&%Clothing that has sleeves and covers from the neck
down.  &%Coats are intended to be worn outdoors.")

(subclass Shoe Clothing)
(documentation Shoe "&%Clothing that is intended to be worn on the &%Foot.
It consists of an upper, a sole, and a heel.")

(=>
   (and
      (wears ?PERSON ?SHOE)
      (instance ?SHOE Shoe))
   (exists (?FOOT)
      (and
         (instance ?FOOT Foot)
         (part ?FOOT ?PERSON)
         (meetsSpatially ?SHOE ?FOOT))))

(subclass Shirt Clothing)
(documentation Shirt "An item of &%Clothing which covers the upper body of a
&%Human.")

(=>
   (and
      (instance ?SHIRT Shirt)
      (wears ?PERSON ?SHIRT))
   (instance ?PERSON Human))

(subclass Dress Clothing)
(documentation Dress "An item of &%Clothing which covers the lower body of a
&%Woman.")

(=>
   (and
      (instance ?DRESS Dress)
      (wears ?PERSON ?DRESS))
   (instance ?PERSON Woman))

(subclass ClothingSuit Collection)
(documentation ClothingSuit "A &%Collection of instances of &%Clothing that
are designed to be worn together.")

(=>
   (and
      (instance ?SUIT ClothingSuit)
      (member ?ITEM1 ?SUIT)
      (holdsDuring ?TIME (wears ?PERSON ?ITEM1)))
   (forall (?ITEM2)
      (=>
         (member ?ITEM2 ?SUIT)
         (holdsDuring ?TIME (wears ?PERSON ?ITEM2)))))

(subclass Leather Fabric)
(documentation Leather "A &%Fabric that is the result of tanning an &%Animal
&%Skin.")

(=>
   (instance ?LEATHER Leather)
   (exists (?MAKE)
      (and
         (instance ?MAKE Making)
         (resource ?MAKE ?SKIN)
         (instance ?SKIN Skin)
         (result ?MAKE ?LEATHER))))

(subclass Pocket Fabric)
(documentation Pocket "A pouch of &%Fabric in an instance of &%Clothing where
something can be kept.")

(=>
   (instance ?POCKET Pocket)
   (exists (?CLOTHING)
      (and
         (instance ?CLOTHING Clothing)
         (part ?POCKET ?CLOTHING))))

(=>
   (instance ?POCKET Pocket)
   (capability Keeping instrument ?POCKET))

(subclass Blanket Fabric)
(documentation Blanket "A piece of &%Fabric whose purpose is to keep a sleeping
person warm.")

(=>
   (instance ?BLANKET Blanket)
   (hasPurpose ?BLANKET (exists (?HEAT ?PERSON)
                           (and
                              (instance ?HEAT Heating)
                              (patient ?HEAT ?PERSON)
                              (instance ?PERSON Human)
                              (located ?PERSON ?BED)
                              (instance ?BED Bed)))))

(instance wears BinaryPredicate)
(domain wears 1 Animal)
(domain wears 2 Clothing)
(documentation wears "(&%wears ?AGENT ?CLOTHING) means that ?AGENT is wearing
the item of &%Clothing ?CLOTHING.")

(=>
   (wears ?AGENT ?CLOTHING)
   (located ?CLOTHING ?AGENT))

(subclass Tying Attaching)
(documentation Tying "The &%Process of tying two things, or two strands of
the same thing, together.")

(subclass Untying Detaching)
(disjoint Untying Tying)
(documentation Untying "The &%Process of untying two things, or two strands
of the same thing.")

(instance patientMedical BinaryPredicate)
(domain patientMedical 1 Human)
(domain patientMedical 2 CognitiveAgent)
(documentation patientMedical "The relation of receiving medical care
from a recognized medical practitioner.  (&%patientMedical ?PATIENT
?DOCTOR) means that ?PATIENT is the patient of ?DOCTOR.  Note that
argument type restriction on the second argument is &%CognitiveAgent
to allow for cases where someone is the patient of an &%Organization,
viz. a &%CareOrganization.")

(=>
   (patientMedical ?PATIENT ?DOCTOR)
   (exists (?PROCESS)
      (and
         (patient ?PROCESS ?PATIENT)
         (agent ?PROCESS ?DOCTOR)
         (or
            (instance ?PROCESS DiagnosticProcess)
            (instance ?PROCESS TherapeuticProcess)))))

(subclass NonspecificDisease DiseaseOrSyndrome)
(documentation NonspecificDisease "The class of &%DiseaseOrSyndromes that are not
caused by a single type of &%Microorganism.")

(=>
   (instance ?DISEASE NonspecificDisease)
   (not (exists (?AGENT)
      (and
         (instance ?AGENT Microorganism)
         (forall (?VICTIM)
            (=>
               (attribute ?VICTIM ?DISEASE)
               (located ?AGENT ?VICTIM)))))))

(instance Cancer DiseaseOrSyndrome)
(documentation Cancer "A &%DiseaseOrSyndrome characterized by pathologic and
uncontrolled cell division that results in a &%Tumor.")

(=>
   (attribute ?PERSON Cancer)
   (exists (?TUMOR)
      (and
         (instance ?TUMOR Tumor)
         (part ?TUMOR ?PERSON))))

(instance conjugate BinaryPredicate)
(instance conjugate IrreflexiveRelation)
(instance conjugate SymmetricRelation)
(instance conjugate TransitiveRelation)
(domain conjugate 1 CompoundSubstance)
(domain conjugate 2 CompoundSubstance)
(documentation conjugate "(&%conjugate ?COMPOUND1 ?COMPOUND2) means that
?COMPOUND1 and ?COMPOUND2 are identical &%CompoundSubstances except that
one has one more &%Proton than the other.")

(=>
   (conjugate ?COMPOUND1 ?COMPOUND2)
   (exists (?NUMBER1 ?NUMBER2)
      (and
         (protonNumber ?COMPOUND1 ?NUMBER1)
         (protonNumber ?COMPOUND2 ?NUMBER2)
         (or
            (equal ?NUMBER1 (AdditionFn ?NUMBER2 1))
            (equal ?NUMBER2 (AdditionFn ?NUMBER1 1))))))

(subclass Biting Grabbing)
(documentation Biting "Any instance of &%Grabbing where the &%instrument is
the &%Mouth of the &%agent.")

(=>
   (and
      (instance ?BITE Biting)
      (agent ?BITE ?ANIMAL))
   (exists (?MOUTH)
      (and
         (instance ?MOUTH Mouth)
         (part ?MOUTH ?ANIMAL)
         (instrument ?BITE ?MOUTH))))

(subclass Spitting Impelling)
(documentation Spitting "Any instance of &%Impelling where the &%origin is
the &%Mouth of the &%agent.")

(=>
   (and
      (instance ?SPIT Spitting)
      (agent ?SPIT ?ANIMAL))
   (exists (?MOUTH)
      (and
         (instance ?MOUTH Mouth)
         (part ?MOUTH ?ANIMAL)
         (origin ?SPIT ?MOUTH))))

(subclass Kicking Impelling)
(documentation Kicking "Any instance of &%Impelling where the &%instrument
is a &%Foot of the &%agent.")

(=>
   (and
      (instance ?KICK Kicking)
      (agent ?KICK ?ANIMAL))
   (exists (?FOOT)
      (and
         (instance ?FOOT Foot)
         (part ?FOOT ?ANIMAL)
         (instrument ?KICK ?FOOT))))

(subclass Mailing Transfer)
(documentation Mailing "Any instance of &%Transfer where a postal system is
used to move the &%patient, either a letter or a package.")

(instance neighbor BinaryPredicate)
(instance neighbor SymmetricRelation)
(instance neighbor IrreflexiveRelation)
(domain neighbor 1 Human)
(domain neighbor 2 Human)
(documentation neighbor "(&%neighbor ?PERSON1 ?PERSON2) means that ?PERSON1 is
a neighbor of ?PERSON2, i.e. ?PERSON1 and ?PERSON2 have their &%homes &%Near
one another.")

(=>
   (neighbor ?PERSON1 ?PERSON2)
   (exists (?HOME1 ?HOME2)
      (and
         (home ?PERSON1 ?HOME1)
         (home ?PERSON2 ?HOME2)
         (not (equal ?HOME1 ?HOME2))
         (orientation ?HOME1 ?HOME2 Near))))

(instance capacity BinaryPredicate)
(domain capacity 1 SelfConnectedObject)
(domain capacity 2 ConstantQuantity)
(relatedInternalConcept capacity humanCapacity)
(documentation capacity "(&%capacity ?OBJ ?QUANTITY) means that ?OBJ can contain
something that has the &%measure of ?QUANTITY.  This predicate denotes maximal
capacity, i.e. ?OBJ can hold no more than ?QUANTITY.  Note, however, that this
does not mean that &%capacity is a &%SingleValuedRelation, since an object may
have various maximal capacities across different dimensions, e.g. a particular
box may have a &%capacity of 3 pounds and a &%capacity of 1 liter.")

(=>
   (and
      (measure ?OBJ1 ?MEAS)
      (contains ?OBJ2 ?OBJ1))
   (capacity ?OBJ2 ?MEAS))

(instance humanCapacity BinaryPredicate)
(instance humanCapacity SingleValuedRelation)
(domain humanCapacity 1 StationaryArtifact)
(domain humanCapacity 2 PositiveInteger)
(documentation humanCapacity "(&%humanCapacity ?CONSTRUCT ?NUMBER) means that the
&%StationaryArtifact ?CONSTRUCT, e.g. a &%Building or a &%Room, can hold a maximum
of ?NUMBER &%Humans without crowding.")

(instance LastFn UnaryFunction)
(domain LastFn 1 List)
(range LastFn Entity)
(documentation LastFn "(&%LastFn ?LIST) returns the last item in the
&%List ?LIST.  For example, (&%LastFn (&%ListFn &%Monday &%Tuesday
&%Wednesday)) would return the value of &%Wednesday.")

(<=>
   (and
      (instance ?LIST List)
      (equal (LastFn ?LIST) ?ITEM))
   (exists (?NUMBER)
      (and
         (equal (ListLengthFn ?LIST) ?NUMBER)
         (equal (ListOrderFn ?LIST ?NUMBER) ?ITEM))))

(instance FirstFn UnaryFunction)
(domain FirstFn 1 List)
(range FirstFn Entity)
(documentation FirstFn "(&%FirstFn ?LIST) returns the first item in
the &%List ?LIST.  For example, (&%FirstFn (&%ListFn &%Monday &%Tuesday
&%Wednesday)) would return the value of &%Monday.")

(=>
   (instance ?LIST List)
   (equal (FirstFn ?LIST) (ListOrderFn ?LIST 1)))

(instance address BinaryPredicate)
(domain address 1 Agent)
(domain address 2 Address)
(documentation address "(&%address ?AGENT ?ADDRESS) means that ?ADDRESS
is an address or part of an address for the &%Agent ?AGENT.  address relates an instance of a CognitiveAgent to the unique designation of a stationary artifact, location, or mail drop where that agent can be contacted.  This address includes buildings, room numbers, streets, mail drop numbers, and post office boxes, but excludes telephone numbers and other addresses that are not stationary.  This is not the most general type of address.")

(subclass Address RelationalAttribute)
(documentation Address "A &%RelationalAttribute that indicates an address
where an &%Agent can regularly be contacted.")

(subrelation postalCode uniqueIdentifier)
(domain postalCode 1 PositiveInteger)
(domain postalCode 2 Address)
(documentation postalCode "(&%postalCode ?NUMBER ?ADDRESS) means that the
the postal code, e.g. zip code, ?NUMBER is part of the address ?ADDRESS.")

(subrelation postalBoxNumber uniqueIdentifier)
(domain postalBoxNumber 1 PositiveInteger)
(domain postalBoxNumber 2 Address)
(documentation postalBoxNumber "(&%postalBoxNumber ?NUMBER ?ADDRESS) means
that the post office box ?NUMBER is part of the address ?ADDRESS.")

(subrelation cityAddress address)
(domain cityAddress 1 City)
(domain cityAddress 2 Address)
(documentation cityAddress "(&%cityAddress ?CITY ?ADDRESS) means that the
&%City ?CITY is part of the address ?ADDRESS.")

(subrelation streetAddress address)
(domain streetAddress 1 Roadway)
(domain streetAddress 2 Address)
(documentation streetAddress "(&%streetAddress ?STREET ?ADDRESS) means
that the &%Roadway ?STREET is part of the address ?ADDRESS.")

(subrelation streetNumber address)
(domain streetNumber 1 Building)
(domain streetNumber 2 Address)
(documentation streetNumber "(&%streetNumber ?BUILDING ?ADDRESS) means
that the &%Building ?BUILDING is part of the address ?ADDRESS.")

(subrelation unitNumber address)
(domain unitNumber 1 StationaryArtifact)
(domain unitNumber 2 Address)
(documentation unitNumber "(&%unitNumber ?UNIT ?ADDRESS) means that the
&%StationaryArtifact ?UNIT is part of the address ?ADDRESS.")

(instance StreetAddressFn QuaternaryFunction)
(domain StreetAddressFn 1 StationaryArtifact)
(domain StreetAddressFn 2 Roadway)
(domain StreetAddressFn 3 City)
(domain StreetAddressFn 4 Nation)
(range StreetAddressFn Agent)
(documentation StreetAddressFn "(&%StreetAddressFn ?BUILDING ?ROAD ?CITY
?COUNTRY) returns the &%Agent, e.g. a family, an organization, a person,
etc. that resides or conducts business at the corresponding &%address.")

(=>
   (equal (StreetAddressFn ?PLACE ?ROAD ?CITY ?COUNTRY) ?AGENT)
   (address ?AGENT ?PLACE))

(=>
   (equal (StreetAddressFn ?PLACE ?ROAD ?CITY ?COUNTRY) ?AGENT)
   (exists (?BUILDING)
      (and
         (instance ?BUILDING Building)
         (part ?PLACE ?BUILDING))))

(subclass ArtStudio StationaryArtifact)
(documentation ArtStudio "A &%Room, suite of &%Rooms or &%Building which is
devoted to the creation of &%ArtWorks.")

(=>
   (instance ?STUDIO ArtStudio)
   (hasPurpose ?STUDIO (exists (?MAKE)
                          (and
                             (instance ?MAKE Making)
                             (result ?MAKE ?WORK)
                             (instance ?WORK ArtWork)))))

(subclass Mine StationaryArtifact)
(documentation Mine "An construction in the earth from which &%Minerals are removed,
either in pure form or as part of ores.")

(=>
   (instance ?MINE Mine)
   (hasPurpose ?MINE (exists (?REMOVE ?MINERAL)
                        (and
                           (instance ?REMOVE Removing)
                           (patient ?REMOVE ?MINERAL)
                           (instance ?MINERAL Mineral)
                           (origin ?REMOVE ?MINE)))))

(subclass MobileResidence Artifact)
(disjoint MobileResidence Residence)
(documentation MobileResidence "Anything which serves to house people but
which changes its location from time to time, e.g. a motorhome, a mobile
home, a camp, etc.  Note that &%MobileResidence is disjoint from &%Residence,
because the latter is a subclass of &%StationaryArtifact.")

(subclass Camp MobileResidence)
(documentation Camp "A &%MobileResidence consisting of tents and other temporary
living quarters that is constructed on an undeveloped &%LandArea.")

(=>
   (instance ?CAMP Camp)
   (exists (?TENT)
      (and
         (instance ?TENT Tent)
         (part ?TENT ?CAMP))))

(subclass Tent MobileResidence)
(documentation Tent "A &%MobileResidence that is made of &%Fabric and poles and
can be easily assembled and disassembled.")

(=>
   (instance ?TENT Tent)
   (exists (?FABRIC)
      (and
         (instance ?FABRIC Fabric)
         (part ?FABRIC ?TENT))))

(subclass ExecutiveResidence PermanentResidence)
(documentation ExecutiveResidence "A &%Residence of a &%chiefOfState, e.g.
the White House, a state governor's mansion, Buckingham Palace, etc.")

(=>
   (instance ?RESIDENCE ExecutiveResidence)
   (exists (?AREA ?POSITION ?PERSON)
      (and
         (located ?RESIDENCE ?AREA)
         (home ?PERSON ?RESIDENCE)
         (chiefOfState ?AREA ?POSITION ?PERSON))))

(subclass ApartmentUnit SingleFamilyResidence)
(documentation ApartmentUnit "A &%SingleFamilyResidence that is not owned
by any member of the &%SocialUnit that lives there.")

(=>
   (and
      (instance ?UNIT ApartmentUnit)
      (home ?PERSON ?UNIT))
   (not (possesses ?PERSON ?UNIT)))

(=>
   (instance ?UNIT ApartmentUnit)
   (exists (?BUILDING)
      (and
         (instance ?BUILDING ApartmentBuilding)
         (part ?UNIT ?BUILDING))))

(subclass CondominiumUnit SingleFamilyResidence)
(documentation CondominiumUnit "A &%SingleFamilyResidence that may be owned
by a member of the &%SocialUnit that lives there.")

(=>
   (and
      (instance ?UNIT SingleFamilyResidence)
      (home ?PERSON ?UNIT)
      (possesses ?PERSON ?UNIT)
      (not (instance ?UNIT Building)))
   (instance ?UNIT CondominiumUnit))

(=>
   (instance ?UNIT CondominiumUnit)
   (exists (?BUILDING)
      (and
         (instance ?BUILDING CondominiumBuilding)
         (part ?UNIT ?BUILDING))))

(subclass House ResidentialBuilding)
(subclass House SingleFamilyResidence)
(documentation House "A &%ResidentialBuilding which is intended to be
inhabited by members of the same &%SocialUnit.  &%Houses are distinguished
from temporary housing like hotels and multi-family dwellings like condominium
and apartment buildings.")

(subclass ApartmentBuilding ResidentialBuilding)
(disjoint ApartmentBuilding SingleFamilyResidence)
(documentation ApartmentBuilding "A &%ResidentialBuilding containing
&%ApartmentUnits.")

(=>
   (instance ?BUILDING ApartmentBuilding)
   (exists (?UNIT1 ?UNIT2)
      (and
         (instance ?UNIT1 ApartmentUnit)
         (instance ?UNIT2 ApartmentUnit)
         (part ?UNIT1 ?BUILDING)
         (part ?UNIT2 ?BUILDING)
         (not (equal ?UNIT1 ?UNIT2)))))

(subclass CondominiumBuilding ResidentialBuilding)
(disjoint CondominiumBuilding SingleFamilyResidence)
(documentation CondominiumBuilding "A &%ResidentialBuilding containing
&%CondominiumUnits.")

(=>
   (instance ?BUILDING CondominiumBuilding)
   (exists (?UNIT1 ?UNIT2)
      (and
         (instance ?UNIT1 CondominiumUnit)
         (instance ?UNIT2 CondominiumUnit)
         (part ?UNIT1 ?BUILDING)
         (part ?UNIT2 ?BUILDING)
         (not (equal ?UNIT1 ?UNIT2)))))

(subclass AnimalResidence Artifact)
(documentation AnimalResidence "An &%Artifact which is intended to house
&%Animals and not &%Humans.  Note that an &%AnimalResidence may or may not
be a &%StationaryArtifact, e.g. a horse stall is stationary while a doghouse
generally is not.")

(=>
   (instance ?RESIDENCE AnimalResidence)
   (hasPurpose ?RESIDENCE (exists (?ANIMAL)
                             (and
                                (instance ?ANIMAL Animal)
                                (not (instance ?ANIMAL Human))
                                (inhabits ?ANIMAL ?RESIDENCE)))))

(subclass PlaceOfCommerce StationaryArtifact)
(partition PlaceOfCommerce CommercialBuilding CommercialUnit)
(documentation PlaceOfCommerce "A &%Building or part of a &%Building which is
intended for organizational activities, e.g. retail or wholesale selling,
manufacturing, office work, etc.")

(=>
   (instance ?OFFICE PlaceOfCommerce)
   (or
      (instance ?OFFICE CommercialBuilding)
      (exists (?BUILDING)
         (and
            (instance ?BUILDING CommercialBuilding)
            (part ?OFFICE ?BUILDING)))))

(subclass CommercialBuilding Building)
(subclass CommercialBuilding PlaceOfCommerce)
(documentation CommercialBuilding "A &%Building which is intended for
organizational activities, e.g. retail or wholesale selling, manufacturing,
office work, etc.")

(subclass CommercialUnit PlaceOfCommerce)
(documentation CommercialUnit "A &%Room or suite of &%Rooms intended for
clerical and/or professional work of a single &%Organization.")

(=>
   (and
      (instance ?UNIT CommercialUnit)
      (instance ?ORG Organization)
      (located ?ORG ?UNIT))
   (not (exists (?OTHER)
      (and
         (instance ?OTHER Organization)
         (located ?OTHER ?UNIT)
         (not (equal ?OTHER ?ORG))))))

(subclass Auditorium Building)
(documentation Auditorium "Any &%Building whose purpose is to hold concerts,
sports events, plays, etc. before an audience.  This class includes theaters,
sports stadiums, university auditoriums, etc.")

(=>
   (instance ?AUDITORIUM Auditorium)
   (hasPurpose ?AUDITORIUM (exists (?DEMO)
                              (and
                                 (instance ?DEMO Demonstrating)
                                 (located ?DEMO ?AUDITORIUM)))))

(=>
   (instance ?AUDITORIUM Auditorium)
   (exists (?STAGE)
      (and
         (instance ?STAGE PerformanceStage)
         (part ?STAGE ?AUDITORIUM))))

(subclass AuditoriumSeat Seat)
(documentation AuditoriumSeat "A &%Seat within an &%Auditorium from which one
can observe the &%PerformanceStage.")

(=>
   (instance ?SEAT AuditoriumSeat)
   (exists (?AUDITORIUM)
      (and
         (instance ?AUDITORIUM Auditorium)
         (part ?SEAT ?AUDITORIUM))))

(=>
   (and
      (instance ?SEAT AuditoriumSeat)
      (part ?SEAT ?AUDITORIUM)
      (part ?STAGE ?AUDITORIUM)
      (instance ?AUDITORIUM Auditorium)
      (instance ?STAGE PerformanceStage)
      (located ?PERSON ?SEAT)
      (instance ?PERSON Human)
      (subclass ?SEE Seeing)
      (forall (?INST)
         (=>
            (instance ?INST ?SEE)
            (patient ?INST ?STAGE))))
   (capability ?SEE agent ?PERSON))

(subrelation enjoys inScopeOfInterest)
(domain enjoys 1 CognitiveAgent)
(domainSubclass enjoys 2 IntentionalProcess)
(documentation enjoys "(&%enjoys ?AGENT ?PROCESS) means that the
&%CognitiveAgent ?AGENT tends to enjoy actions of type ?PROCESS,
i.e. tends to enjoy being the &%agent or &%experiencer of such
actions.")

(=>
   (enjoys ?AGENT ?PROCESS)
   (desires ?AGENT (exists (?INSTANCE)
                      (and
                         (instance ?INSTANCE ?PROCESS)
                         (or
                            (agent ?INSTANCE ?AGENT)
                            (experiencer ?INSTANCE ?AGENT))))))

(subrelation expects believes)
(documentation expects "Any belief about the future.  (&%expects
?AGENT ?BELIEF) means that (&%believes ?AGENT ?BELIEF) and, if
?BELIEF happens, it will happen in the future, i.e. after the
expectation.")

(=>
   (and
      (holdsDuring ?TIME1 (expects ?AGENT ?FORMULA))
      (holdsDuring ?TIME2 (true ?FORMULA True)))
   (earlier ?TIME1 ?TIME2))

(subrelation fears expects)
(documentation fears "(&%fears ?AGENT ?FORMULA) means that ?AGENT fears that
the proposition ?FORMULA will be true, i.e. he/she believes that it will
come to pass in the future and that it will be undesirable for ?AGENT.")

(=>
   (fears ?AGENT ?FORMULA)
   (not (desires ?AGENT ?FORMULA)))

(subrelation hopes expects)
(documentation hopes "(&%hopes ?AGENT ?FORMULA) means that ?AGENT hopes that
the proposition ?FORMULA will be true, i.e. he/she believes that it will
come to pass in the future and that it will be desirable for ?AGENT.")

(=>
   (hopes ?AGENT ?FORMULA)
   (desires ?AGENT ?FORMULA))

(instance doubts PropositionalAttitude)
(domain doubts 1 CognitiveAgent)
(domain doubts 2 Formula)
(documentation doubts "(&%doubts ?AGENT ?FORMULA) means that ?AGENT is unsure
about the truth of ?FORMULA, in particular ?AGENT does not believe that
?FORMULA is true.")

(=>
   (doubts ?AGENT ?FORMULA)
   (not (believes ?AGENT ?FORMULA)))

(instance dislikes ObjectAttitude)
(subrelation dislikes inScopeOfInterest)
(disjointRelation dislikes wants)
(relatedInternalConcept dislikes disapproves)
(domain dislikes 1 CognitiveAgent)
(domain dislikes 2 Object)
(documentation dislikes "(&%dislikes ?AGENT ?OBJECT) means that ?AGENT has a
feeling of antipathy to ?OBJECT, i.e. ?AGENT believes that ?OBJECT will
thwart one of his/her goals.  Note that there is no implication that what
is hated by an agent is not already possessed by the agent.")

(=>
   (dislikes ?AGENT ?OBJECT)
   (desires ?AGENT (not (possesses ?AGENT ?OBJECT))))

(instance disapproves PropositionalAttitude)
(subrelation disapproves inScopeOfInterest)
(disjointRelation disapproves desires)
(domain disapproves 1 CognitiveAgent)
(domain disapproves 2 Formula)
(documentation disapproves "(&%disapproves ?AGENT ?FORMULA) means that
?AGENT has a feeling of antipathy to the state of affairs represented by
?FORMULA, i.e. ?AGENT believes that the realization of ?FORMULA will
thwart one of his/her goals.  Note that there is no implication that what
is disapproved of by an agent is not already true.")

(=>
   (dislikes ?AGENT ?OBJECT)
   (desires ?AGENT (not (possesses ?AGENT ?OBJECT))))

(subrelation lacks needs)
(documentation lacks "(&%lacks ?AGENT ?OBJECT) means that ?AGENT &%needs
?OBJECT and it is not currently the case that ?AGENT &%possesses ?OBJECT.")

(=>
   (holdsDuring ?TIME (lacks ?AGENT ?OBJECT))
   (holdsDuring ?TIME (not (possesses ?AGENT ?OBJECT))))

(instance Antisemitism BeliefGroup)
(documentation Antisemitism "The &%BeliefGroup that is characterized by a
dislike for &%Judaism.")

(=>
   (member ?MEMBER Antisemitism)
   (dislikes ?MEMBER Judaism))

(instance DescendantsFn UnaryFunction)
(domain DescendantsFn 1 Human)
(range DescendantsFn FamilyGroup)
(documentation DescendantsFn "(&%DescendantsFn ?PERSON) denotes all and only
the descendants of ?PERSON, i.e. the &%Group consisting of ?OFFSPRING who
satisfy the following formula:  (&%ancestor ?OFFSPRING ?PERSON).")

(=>
   (and
      (instance ?PERSON Human)
      (equal (DescendantsFn ?PERSON) ?DESCENDANTS))
   (forall (?MEMBER)
      (<=>
         (member ?MEMBER ?DESCENDANTS)
         (ancestor ?MEMBER ?PERSON))))

(subclass GroupOfAnimals Group)
(documentation GroupOfAnimals "Any &%Group which contains exclusively
non-human &%members.")

(=>
   (instance ?GROUP GroupOfAnimals)
   (forall (?MEMBER)
      (=>
         (member ?MEMBER ?GROUP)
         (and
            (instance ?MEMBER Animal)
            (not (instance ?MEMBER Human))))))

(subclass Brood GroupOfAnimals)
(documentation Brood "A &%GroupOfAnimals that are all born at the same time
and to the same parents.")

(=>
   (instance ?BROOD Brood)
   (forall (?MEMBER1 ?MEMBER2)
      (=>
         (and
            (member ?MEMBER1 ?BROOD)
            (member ?MEMBER2 ?BROOD))
         (sibling ?MEMBER1 ?MEMBER2))))

(=>
   (instance ?BROOD Brood)
   (exists (?TIME)
      (forall (?MEMBER)
         (=>
            (member ?MEMBER ?BROOD)
            (exists (?BIRTH)
               (and
                  (instance ?BIRTH Birth)
                  (experiencer ?BIRTH ?MEMBER)
                  (equal ?TIME (WhenFn ?BIRTH))))))))

(subclass SportsTeam GroupOfPeople)
(documentation SportsTeam "A &%GroupOfPeople who habitually play a &%Sport
together, either as an occupation or as a leisure activity.")

(=>
   (instance ?TEAM SportsTeam)
   (exists (?SPORT)
      (and
	 (subclass ?SPORT Sport)
         (capability ?SPORT agent ?TEAM))))

(instance conclusion BinaryPredicate)
(instance conclusion SingleValuedRelation)
(instance conclusion TotalValuedRelation)
(domain conclusion 1 Argument)
(domain conclusion 2 Proposition)
(documentation conclusion "(&%conclusion ?ARGUMENT ?PROPOSITION) means that
the &%Proposition ?PROPOSITION is the conclusion explicitly drawn from the
&%Argument ?ARGUMENT.  Note that it may or may not be the case that ?ARGUMENT
&%entails ?PROPOSITION.")

(instance consistent BinaryPredicate)
(instance consistent SymmetricRelation)
(domain consistent 1 Proposition)
(domain consistent 2 Proposition)
(documentation consistent "(&%consistent ?PROP1 ?PROP2) means that the two
&%Propositions ?PROP1 and ?PROP2 are consistent with one another, i.e. it
is possible for both of them to be true at the same time.")

(subrelation groupMember member)
(domain groupMember 1 Human)
(domain groupMember 2 GroupOfPeople)
(documentation groupMember "A &%subrelation of &%member, &%groupMember
is used to relate a &%Human to a &%GroupOfPeople of which he/she is a
&%member.")

(subclass CareOrganization Organization)
(partition CareOrganization Hospital MedicalClinic)
(documentation CareOrganization "Any &%Organization whose purpose is to
provide medical care for for &%Humans who reside there, either permanently
or temporarily.")

(=>
   (instance ?ORG CareOrganization)
   (hasPurpose ?ORG (exists (?PATIENT) (medicalPatient ?PATIENT ?ORG))))

(subclass Hospital CareOrganization)
(subclass Hospital TemporaryResidence)
(documentation Hospital "A &%CareOrganization where patients reside for a
short period of time while they undergo treatment for a disease or disorder.")

(subclass MedicalClinic CareOrganization)
(subclass MedicalClinic (ComplementFn Residence))
(documentation MedicalClinic "A &%CareOrganization which provides medical care
on an out-patient basis only, i.e. there are no rooms where patients may take
up residence for a period of time while they receive care.")

(subclass Proprietorship Corporation)
(documentation Proprietorship "A &%Corporation that is owned by a single person.")

(=>
   (instance ?CORP Proprietorship)
   (exists (?HUMAN)
      (and
         (instance ?HUMAN Human)
         (possesses ?HUMAN ?CORP)
         (forall (?PERSON)
            (=>
               (possesses ?PERSON ?CORP)
               (equal ?PERSON ?HUMAN))))))

(subclass Restaurant Corporation)
(documentation Restaurant "Any &%Corporation whose services include selling
&%Food to customers which is intended to be eaten on the premises.")

(=>
   (instance ?COMPANY Restaurant)
   (exists (?SERVICE ?FOOD)
      (and
         (instance ?SERVICE CommercialService)
         (agent ?SERVICE ?COMPANY)
         (instance ?SERVICE Selling)
         (patient ?SERVICE ?FOOD)
         (instance ?FOOD Food))))

(subclass Cafeteria Restaurant)
(documentation Cafeteria "Any &%Restaurant which does not offer table service.
&%Food is selected and purchased at a central counter.")

(subclass Tavern Restaurant)
(documentation Tavern "A &%Restaurant whose primary service is selling
&%AlcoholicBeverages to customers.")

(=>
   (instance ?COMPANY Tavern)
   (exists (?SERVICE ?BEVERAGE)
      (and
         (instance ?SERVICE CommercialService)
         (agent ?SERVICE ?COMPANY)
         (instance ?SERVICE Selling)
         (patient ?SERVICE ?BEVERAGE)
         (instance ?BEVERAGE Beverage))))

(subclass TransportationCompany Corporation)
(documentation TransportationCompany "Any &%Corporation whose services
include &%Transportation, e.g. a &%RailroadCompany, an airline, a cruise
ship line, etc.")

(=>
   (instance ?COMPANY TransportationCompany)
   (exists (?SERVICE)
      (and
         (instance ?SERVICE CommercialService)
         (agent ?SERVICE ?COMPANY)
         (instance ?SERVICE Transportation))))

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

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

(subclass WholesaleStore MercantileOrganization)
(documentation WholesaleStore "A &%MercantileOrganization that sells its
goods exclusively to &%Corporations.")

(=>
   (and
      (instance ?STORE WholesaleStore)
      (customer ?CUSTOMER ?STORE))
   (instance ?CUSTOMER Corporation))

(subclass RetailStore MercantileOrganization)
(disjoint RetailStore WholesaleStore)
(documentation RetailStore "The complement of &%WholesaleStore, i.e.
&%MercantileOrganizations that sell their goods to the general public.")

(subclass GroceryStore RetailStore)
(documentation GroceryStore "A &%RetailStore that sells &%Food, and perhaps
other items as well.")

(=>
   (instance ?STORE GroceryStore)
   (exists (?SELL)
      (and
         (instance ?SELL Selling)
         (agent ?SELL ?STORE)
         (patient ?SELL ?FOOD)
         (instance ?FOOD Food))))

(subclass OfferingForSale Offering)
(documentation OfferingForSale "&%Offering to sell something to someone.")

(=>
   (and
      (instance ?SALE OfferingForSale)
      (agent ?SALE ?AGENT))
   (patient ?SALE (exists (?SELL ?OBJ)
                     (and
                        (instance ?SELL Selling)
                        (patient ?SELL ?OBJ)
                        (agent ?SELL ?AGENT)))))

(subclass BargainSale Offering)
(documentation BargainSale "&%Offering to sell something to someone at a
reduced price.")

(=>
   (and
      (instance ?SALE BargainSale)
      (patient ?SALE ?OBJ)
      (instance ?OBJ Object))
   (exists (?PRICE1 ?PRICE2 ?AGENT1 ?AGENT2)
      (and
         (holdsDuring (ImmediatePastFn (WhenFn ?SALE)) (price ?OBJ ?PRICE1 ?AGENT1))
         (holdsDuring (WhenFn ?SALE) (price ?OBJ ?PRICE2 ?AGENT2))
         (lessThan ?PRICE2 ?PRICE1))))

(subclass HolyBible Book)
(documentation HolyBible "Any instance of the collection of writings which is regarded as scripture by those who embrace &%Christianity.")

(subclass MissionOrganization ReligiousOrganization)
(documentation MissionOrganization "The class of &%ReligiousOrganizations
that send members to foreign countries with the aim of coverting citizens
of those countries to the beliefs of the &%ReligiousOrganization.")

(subclass ReligiousBuilding Building)
(documentation ReligiousBuilding "A &%Building which is intended to be
used for religious worship.  This class covers churches, temples,
religious shrines, etc.")

(=>
   (instance ?BUILDING ReligiousBuilding)
   (hasPurpose ?BUILDING (exists (?SERVICE)
                            (and
                               (instance ?SERVICE ReligiousService)
                               (located ?SERVICE ?BUILDING)))))

(subclass Steeple StationaryArtifact)
(documentation Steeple "A component of a &%ReligiousBuilding that is tall
and narrow and symbolizes the connection between humanity and a deity.")

(=>
   (instance ?STEEPLE Steeple)
   (exists (?BUILDING)
      (and
         (instance ?BUILDING Building)
         (part ?STEEPLE ?BUILDING))))

(subclass ReligiousService ReligiousProcess)
(subclass ReligiousService Demonstrating)
(documentation ReligiousService "A formal process of public worship which is
typically carried out in a church, temple or other sanctified building and
which typically accords with a prescribed set of rules.")

(subclass ChristianService ReligiousService)
(documentation ChristianService "Any &%ReligiousService that is conducted by
&%members of &%Christianity.")

(=>
   (and
      (instance ?SERVICE ChristianService)
      (agent ?SERVICE ?PERSON)
      (instance ?PERSON Human))
   (member ?PERSON Christianity))

(subclass Praying ReligiousProcess)
(subclass Praying Requesting)
(documentation Praying "A formal or informal process of private worship which
may or may not be carried out in a &%ReligiousBuilding.")

(subclass PartyPlatform FactualText)
(documentation PartyPlatform "A &%Text which is authored by a &%PoliticalParty
and which contains the core goals and principles of the &%PoliticalParty for a
particular year or election cycle.")

(=>
   (and
      (subclass ?PLATFORM PartyPlatform)
      (authors ?PARTY ?PLATFORM)
      (instance ?PARTY Organization))
   (instance ?PARTY PoliticalParty))

(=>
   (and
      (subclass ?PLATFORM PartyPlatform)
      (authors ?PARTY ?PLATFORM)
      (instance ?PARTY PoliticalParty)
      (instance ?INST ?PLATFORM)
      (containsInformation ?INST ?PROP))
   (believes ?PARTY ?PROP))

(instance ResidentFn UnaryFunction)
(domain ResidentFn 1 GeopoliticalArea)
(range ResidentFn GroupOfPeople)
(documentation ResidentFn "(&%ResidentFn ?AREA) denotes the
&%GroupOfPeople who have their &%home in ?AREA.")

(=>
   (member ?PERSON (ResidentFn ?AREA))
   (home ?PERSON ?AREA))

(subrelation CitizenryFn ResidentFn)
(domain CitizenryFn 1 GeopoliticalArea)
(range CitizenryFn GroupOfPeople)
(documentation CitizenryFn "(&%CitizenryFn ?AREA) denotes the
&%GroupOfPeople who are legal and permanent residents of the
&%GeopoliticalArea ?AREA.")

(=>
   (and
      (instance ?AREA GeopoliticalArea)
      (equal ?CITIZENRY (CitizenryFn ?AREA))
      (equal ?POPULATION (ResidentFn ?AREA)))
   (greaterThanOrEqualTo ?POPULATION ?CITIZENRY))

(instance PerCapitaFn BinaryFunction)
(domain PerCapitaFn 1 Quantity)
(domain PerCapitaFn 2 GeopoliticalArea)
(range PerCapitaFn Quantity)
(documentation PerCapitaFn "(&%PerCapitaFn ?AREA ?QUANTITY) denotes the
average amount of ?QUANTITY possessed by a resident of &%GeopoliticalArea
?AREA.")

(=>
   (equal (PerCapitaFn ?AREA ?QUANTITY1) ?QUANTITY2)
   (exists (?POPULATION)
      (and
         (equal ?POPULATION (CardinalityFn (ResidentFn ?AREA)))
         (equal ?QUANTITY2 (DivisionFn ?QUANTITY1 ?POPULATION)))))

(subclass CityDistrict GeopoliticalArea)
(documentation CityDistrict "Any &%geopoliticalSubdivision of a &%City.")

(<=>
   (instance ?DISTRICT CityDistrict)
   (exists (?CITY)
      (and
         (instance ?CITY City)
         (geopoliticalSubdivision ?DISTRICT ?CITY))))

(subclass Downtown CityDistrict)
(documentation Downtown "The commercial center of a &%City.  The part of the
&%City that contains more shops and offices than any other part.")

(subclass Park LandArea)
(documentation Park "A publicly owned &%LandArea which is intended to be used
for recreation and/or exercise.")

(=>
   (instance ?PARK Park)
   (exists (?GOV)
      (and
         (instance ?GOV Government)
         (possesses ?GOV ?PARK))))

(=>
   (instance ?PARK Park)
   (hasPurpose ?PARK (exists (?REC)
                        (and
                           (instance ?REC RecreationOrExercise)
                           (located ?REC ?PARK)))))

(subclass County GeopoliticalArea)
(subclass County LandArea)
(documentation County "A &%GeopoliticalArea that is a subdivision of a
&%StateOrProvince.")

(=>
   (instance ?COUNTY County)
   (exists (?STATE)
      (and
         (instance ?STATE StateOrProvince)
         (part ?COUNTY ?STATE))))

(subclass AmericanState StateOrProvince)
(documentation AmericanState "The class of states that make up the
&%UnitedStates.")

(=>
   (instance ?STATE AmericanState)
   (part ?STATE UnitedStates))

(subclass AmericanCity City)
(documentation AmericanCity "The class of cities that are in the
&%UnitedStates.")

(=>
   (instance ?CITY AmericanCity)
   (part ?CITY UnitedStates))

(subclass EuropeanCity City)
(documentation EuropeanCity "The class of cities that are in &%Europe.")

(=>
   (instance ?CITY EuropeanCity)
   (part ?CITY Europe))

(subclass GovernmentSecretary Position)
(documentation GovernmentSecretary "The class of &%Positions where the position holder
is head of an adminstrative department of &%Government.")

(subclass StateGovernment Government)
(documentation StateGovernment "The class of &%Governments whose
jurisdictions are &%StateOrProvinces.")

(=>
   (instance ?GOVERNMENT StateGovernment)
   (exists (?STATE)
      (and
         (instance ?STATE StateOrProvince)
         (equal (GovernmentFn ?STATE) ?GOVERNMENT))))

(subclass MilitaryService MilitaryOrganization)
(documentation MilitaryService "A branch of the armed forces of a &%Nation.
For example, there are five military services in the United States, the army,
the navy, the air force, the marines, and the coast guard.")

(subclass Army MilitaryService)
(documentation Army "&%MilitaryServices that are land forces.")

(subclass MilitaryUnit MilitaryOrganization)
(documentation MilitaryUnit "Any &%MilitaryOrganization that can be dispatched
to an area of operations.")

(subclass InfantryUnit MilitaryUnit)
(documentation InfantryUnit "A &%MilitaryUnit composed primarily of &%Soldiers
who fight on foot, i.e. without the use of heavy artillery.")

(subclass MilitaryDivision MilitaryUnit)
(documentation MilitaryDivision "Any &%MilitaryUnit with the rank of
division.")

(subclass MilitaryBrigade MilitaryUnit)
(documentation MilitaryBrigade "Any &%MilitaryUnit with the rank of
brigade.")

(subclass MilitaryCompany MilitaryUnit)
(documentation MilitaryCompany "Any &%MilitaryUnit with the rank of
company.")

(subclass MilitaryRegiment MilitaryUnit)
(documentation MilitaryRegiment "Any &%MilitaryUnit with the rank of
regiment.")

(subclass Commission Organization)
(documentation Commission "A small, temporary &%Organization whose purpose
is to investigate some issue.")

(=>
   (instance ?COMMISSION Commission)
   (hasPurpose ?COMMISSION (exists (?INVESTIGATE ?ISSUE)
                              (and
                                 (instance ?INVESTIGATE Investigating)
                                 (patient ?INVESTIGATE ?ISSUE)
                                 (agent ?INVESTIGATE ?COMMISSION)))))

(subclass ServiceOrganization Organization)
(documentation ServiceOrganization "An &%Organization that performs
a public service and is regulated by the &%Government.")

(=>
   (instance ?ORG ServiceOrganization)
   (exists (?PROC ?GOV)
      (and
         (instance ?PROC RegulatoryProcess)
         (patient ?PROC ?ORG)
         (agent ?PROC ?GOV)
         (instance ?GOV Government))))

(subclass OrganizationalBoard Organization)
(documentation OrganizationalBoard "Part of an &%Organization that
is responsible for managing the &%Organization.")

(=>
   (instance ?BOARD OrganizationalBoard)
   (exists (?ORG ?MANAGE)
      (and
         (subOrganization ?BOARD ?ORG)
         (instance ?MANAGE Managing)
         (agent ?MANAGE ?BOARD)
         (patient ?MANAGE ?ORG))))

(subclass SecurityUnit Organization)
(documentation SecurityUnit "The &%Organization that is charged with
ensuring the security of members of the overall &%Organization and the
property of the &%Organization.")

(=>
   (and
      (instance ?UNIT SecurityUnit)
      (subOrganization (OrganizationFn ?UNIT) ?ORG))
   (holdsObligation (exists (?MAINTAIN)
                       (and
                          (instance ?MAINTAIN Maintaining)
                          (agent ?MAINTAIN ?UNIT)
                          (patient ?MAINTAIN ?ORG)))))

(subclass UnionOrganization Organization)
(documentation UnionOrganization "An &%Organization comprised of workers from
the same &%Corporation or &%Industry.  The purpose of the &%UnionOrganization
is to strengthen its representation in bargaining with the &%Corporation or
&%Industry.")

(=>
   (instance ?ORG UnionOrganization)
   (exists (?COLL)
      (=>
         (member ?MEMBER ?ORG)
         (or
            (and
               (instance ?COLL Corporation)
               (employs ?COLL ?MEMBER))
            (exists (?CORP)
               (and
                  (instance ?COLL Industry)
                  (member ?CORP ?COLL)
                  (employs ?CORP ?MEMBER)))))))

(subclass OrganicCompound CompoundSubstance)
(documentation OrganicCompound "Any &%CompoundSubstance that has a &%Carbon
base.")

(=>
   (and
      (instance ?COMPOUND OrganicCompound)
      (instance ?COMPOUND Molecule))
   (exists (?CARBON)
      (and
         (instance ?CARBON Carbon)
         (part ?CARBON ?COMPOUND))))

(subclass Alcohol OrganicCompound)
(documentation Alcohol "&%OrganicCompounds that are produced from hydrocarbons
by distillation.")

(subclass SodiumChloride CompoundSubstance)
(documentation SodiumChloride "The &%CompoundSubstance formed from &%Sodium
and &%Chlorine.")

(=>
   (instance ?SALT SodiumChloride)
   (exists (?SYNTHESIS ?SODIUM ?CHLORINE)
      (and
         (instance ?SYNTHESIS ChemicalSynthesis)
         (resource ?SYNTHESIS ?SODIUM)
         (instance ?SODIUM Sodium)
         (resource ?SYNTHESIS ?CHLORINE)
         (instance ?CHLORINE Chlorine)
         (result ?SYNTHESIS ?SALT))))

(subclass SalineSolution Solution)
(documentation SalineSolution "A &%Solution consisting of &%SodiumChloride and
&%Water.")

(=>
   (and
      (instance ?SOLUTION SalineSolution)
      (part ?PART ?SOLUTION))
   (or
      (instance ?PART SodiumChloride)
      (instance ?PART Water)))

(=>
   (instance ?WATER Water)
   (exists (?SYNTHESIS ?HYDROGEN ?OXYGEN)
      (and
         (instance ?SYNTHESIS ChemicalSynthesis)
         (resource ?SYNTHESIS ?HYDROGEN)
         (instance ?HYDROGEN Hydrogen)
         (resource ?SYNTHESIS ?OXYGEN)
         (instance ?OXYGEN Oxygen)
         (result ?SYNTHESIS ?WATER))))

(subclass Oil Solution)
(documentation Oil "A greasy, viscous &%Solution that cannot be mixed with &%Water.
Note that this general class covers petroleum oil, vegetable oil, animal fat, etc.")

(=>
   (instance ?OIL Oil)
   (not (exists (?MIX ?WATER)
      (and
         (instance ?MIX Mixture)
         (part ?WATER ?MIX)
         (instance ?WATER Water)
         (part ?OIL ?MIX)))))

(subclass Detergent Mixture)
(documentation Detergent "Any &%Mixture whose purpose is to remove &%Soil
and/or other undesirable substances from the surfaces of objects.")

(=>
   (instance ?DETERGENT Detergent)
   (hasPurpose ?DETERGENT (exists (?REMOVE ?SUBSTANCE ?SURFACE ?OBJECT)
                             (and
                                (instance ?REMOVE Removing)
                                (instance ?SUBSTANCE Substance)
                                (patient ?REMOVE ?SUBSTANCE)
                                (origin ?REMOVE ?SURFACE)
                                (surface ?SURFACE ?OBJECT)))))

(subclass Glue Mixture)
(documentation Glue "Any &%Mixture whose purpose is to be used as the &%instrument
of &%Attaching one thing to another.")

(=>
   (instance ?GLUE Glue)
   (hasPurpose ?GLUE (exists (?ATTACH)
                            (and
                               (instance ?ATTACH Attaching)
                               (instrument ?ATTACH ?GLUE)))))

(subclass Glass Mixture)
(documentation Glass "A transparent or translucent &%Mixture of silicates.")

(subclass MetallicAlloy Mixture)
(documentation MetallicAlloy "A &%Mixture of two or more &%Metals, and possibly
nonmetallic elements as well.  For example, steel is an alloy containing iron
and manganese.")

(=>
   (instance ?ALLOY MetallicAlloy)
   (exists (?METAL1 ?METAL2)
      (and
         (instance ?METAL1 Metal)
         (instance ?METAL2 Metal)
         (not (equal ?METAL1 ?METAL2))
         (part ?METAL1 ?ALLOY)
         (part ?METAL2 ?ALLOY))))

(subclass Steel MetallicAlloy)
(documentation Steel "A &%MetallicAlloy made from &%Iron and other elements.")

(=>
   (instance ?STEEL Steel)
   (exists (?IRON)
      (and
         (instance ?IRON Iron)
         (part ?IRON ?STEEL))))

(subclass Brass MetallicAlloy)
(documentation Brass "A &%MetallicAlloy made from &%Copper and &%Zinc.")

(=>
   (instance ?BRASS Brass)
   (exists (?COPPER ?ZINC)
      (and
         (instance ?COPPER Copper)
         (instance ?ZINC Zinc)
         (part ?COPPER ?BRASS)
         (part ?ZINC ?BRASS))))

(subclass Powder Substance)
(documentation Powder "Any &%Solid &%Substance which consists of loose,
identical, and very small particles.")

(=>
   (instance ?POWDER Powder)
   (attribute ?POWDER Solid))

(subclass Fallout Powder)
(documentation Fallout "Radioactive powder that is typically dispersed by
the explosion of a nuclear weapon.")

(=>
   (instance ?POWDER Fallout)
   (capability RadiatingNuclear instrument ?POWDER))

(subclass Fog WaterCloud)
(documentation Fog "Any &%WaterCloud that is in contact with the ground.")

(=>
   (instance ?FOG Fog)
   (exists (?LAND)
      (and
         (instance ?LAND LandArea)
         (meetsSpatially ?FOG ?LAND))))

(subclass Ice Water)
(documentation Ice "&%Water that has the &%PhysicalState of &%Solid.")

(<=>
   (instance ?ICE Ice)
   (and
      (instance ?ICE Water)
      (attribute ?ICE Solid)))

(=>
   (and
      (instance ?ICE Ice)
      (measure ?ICE (MeasureFn ?NUMBER CelsiusDegree)))
   (lessThanOrEqualTo ?NUMBER 0))

(subclass Field LandArea)
(documentation Field "A &%LandArea that has been cleared of &%BotanicalTrees.
Note that a &%Field is not necessarily used for the cultivation of crops and
that a &%Field may be very small, e.g. &%Lawn is a subclass of &%Field.")

(=>
   (instance ?FIELD Field)
   (not (exists (?TREE)
      (and
         (instance ?TREE BotanicalTree)
         (located ?TREE ?FIELD)))))

(subclass Lawn Field)
(documentation Lawn "A &%Field of cultivated and mowed &%Grass.")

(=>
   (instance ?LAWN Lawn)
   (exists (?GRASS)
      (and
         (instance ?GRASS Grass)
         (located ?GRASS ?LAWN))))

(subclass MilitaryFront GeographicArea)
(documentation MilitaryFront "A &%GeographicArea along which opposing military
forces confront one another in a &%Battle.")

(=>
   (holdsDuring ?TIME (instance ?AREA MilitaryFront))
   (exists (?BATTLE)
      (and
         (instance ?BATTLE Battle)
         (located ?BATTLE ?AREA)
         (temporalPart ?TIME ?BATTLE))))

(subclass SpaceRegion Region)
(disjoint SpaceRegion GeographicArea)
(partition SpaceRegion AtmosphericRegion OuterSpaceRegion)
(documentation SpaceRegion "The class of all &%Regions which are not
&%GeographicAreas.")

(subclass OuterSpaceRegion SpaceRegion)
(documentation OuterSpaceRegion "The class of all &%Regions which are
neither &%GeographicAreas nor &%AtmosphericRegions.")

(subclass StormFront AtmosphericRegion)
(documentation StormFront "The &%Region where two or more unstable air
masses meet.")

(=>
   (instance ?FRONT StormFront)
   (exists (?AIR1 ?AIR2)
      (and
         (instance ?AIR1 Air)
         (instance ?AIR2 Air)
         (between ?AIR1 ?FRONT ?AIR2))))

(instance Outside Region)
(documentation Outside "Any &%Region which is not enclosed by a &%Building
or part of a &%Building.")

(=>
   (instance ?OUTSIDE Outside)
   (not (exists (?BUILDING ?THING)
      (and
         (instance ?BUILDING Building)
         (located ?THING ?BUILDING)
         (located ?THING ?OUTSIDE)))))

(subclass BiologicalSpecies Class)
(documentation BiologicalSpecies "The &%Class of all biological species, i.e.
the class of all classes of &%Organism whose instances can interbreed.")

(=>
   (instance ?SPECIES BiologicalSpecies)
   (subclass ?SPECIES Organism))

(subclass Wood Tissue)
(subclass Wood PlantSubstance)
(documentation Wood "&%Tissue that comprises the inner trunk of &%Trees.
It is often used in constructing &%Buildings and other &%Artifacts.")

(subclass Opium BiologicallyActiveSubstance)
(subclass Opium PlantSubstance)
(documentation Opium "A substance harvested from the seed capsules of the
opium poppy that contains various powerful alkaloids.")

(subclass Grass FloweringPlant)
(documentation Grass "&%FloweringPlants with green, narrow leaves that are
used for lawns and &%Fields.")

(subclass Tumor AbnormalAnatomicalStructure)
(documentation Tumor "Any &%AbnormalAnatomicalStructure which consists of a
mass of &%Tissue.  Note that this class covers both malignant (i.e. cancerous)
and benign tumors.")

(=>
   (instance ?TUMOR Tumor)
   (forall (?PART)
      (=>
         (part ?PART ?TUMOR)
         (instance ?PART Tissue))))

(subclass AnimalSubstance BodySubstance)
(documentation AnimalSubstance "&%BodySubstances that are produced
exclusively by &%Animals.")

(=>
   (and
      (instance ?SUBSTANCE AnimalSubstance)
      (instance ?ANIMAL Organism)
      (part ?SUBSTANCE ?ANIMAL))
   (instance ?ANIMAL Animal))

(subclass PlantSubstance BodySubstance)
(documentation PlantSubstance "&%BodySubstances that are produced
exclusively by &%Plants.")

(=>
   (and
      (instance ?SUBSTANCE PlantSubstance)
      (instance ?PLANT Organism)
      (part ?SUBSTANCE ?PLANT))
   (instance ?PLANT Plant))

(subclass Sweat AnimalSubstance)
(documentation Sweat "An &%AnimalSubstance that contains &%SodiumChloride
and is produced by the sweat glands.")

(=>
   (instance ?SWEAT Sweat)
   (exists (?PART)
      (and
         (instance ?PART SodiumChloride)
         (part ?PART ?SWEAT))))

(subclass PlantLeaf PlantAnatomicalStructure)
(subclass PlantLeaf Organ)
(documentation PlantLeaf "An &%Organ of &%Plants whose main purpose is
photosynthesis.")

(subclass PlantBranch PlantAnatomicalStructure)
(subclass PlantBranch BodyPart)
(documentation PlantBranch "The stem of a &%Plant or any shoot arising from
the stem of a &%Plant.")

(subclass PlantRoot PlantAnatomicalStructure)
(subclass PlantRoot Organ)
(documentation PlantRoot "An &%Organ of &%Plants whose main purpose is
twofold, viz. to absorb nutrients from the ground and to anchor the &%Plant
in place.")

(subclass Flower PlantAnatomicalStructure)
(subclass Flower Organ)
(documentation Flower "The reproductive organ of &%FloweringPlants.")

(=>
   (instance ?FLOWER Flower)
   (exists (?PLANT)
      (and
         (instance ?PLANT FloweringPlant)
         (part ?FLOWER ?PLANT))))

(subclass Antibody Protein)
(documentation Antibody "An immunoglobulin which is produced by the body
and which has the ability to neutralize &%Antigens.")

(=>
   (instance ?BODY Antibody)
   (hasPurpose ?BODY (exists (?DEST)
                        (and
                           (instance ?DEST Destruction)
                           (agent ?DEST ?BODY)
                           (patient ?DEST ?ANTI)
                           (instance ?ANTI Antigen)))))

(subclass Antigen BiologicallyActiveSubstance)
(documentation Antigen "Any &%BiologicallyActiveSubstance that has the
capacity to stimulate the production of &%Antibodies.")

(subclass LiquidBodySubstance BodySubstance)
(documentation LiquidBodySubstance "Any &%BodySubstance which is &%Liquid
under normal circumstances.")

(=>
   (instance ?SUBSTANCE LiquidBodySubstance)
   (attribute ?SUBSTANCE Liquid))

(subclass Serum LiquidBodySubstance)
(disjoint Serum Blood)
(documentation Serum "Any &%LiquidBodySubstance other than &%Blood.")

(subclass Milk LiquidBodySubstance)
(subclass Milk Beverage)
(documentation Milk "A nutritious &%BodySubstance produced by &%Mammals.")

(=>
   (instance ?MILK Milk)
   (exists (?PROCESS ?MAMMAL)
      (and
         (instance ?MAMMAL Mammal)
         (instrument ?PROCESS ?MAMMAL)
         (result ?PROCESS ?MILK))))

(subclass CellNucleus OrganicObject)
(documentation CellNucleus "The part of the &%Cell that contains DNA and
RNA.")

(=>
   (instance ?NUCLEUS CellNucleus)
   (exists (?CELL)
      (and
         (instance ?CELL Cell)
         (part ?NUCLEUS ?CELL))))

(subclass AlcoholicBeverage Beverage)
(documentation AlcoholicBeverage "Any &%Beverage that contains &%Alcohol.")

(=>
   (instance ?BEVERAGE AlcoholicBeverage)
   (exists (?ALCOHOL)
      (and
         (instance ?ALCOHOL Alcohol)
         (part ?ALCOHOL ?BEVERAGE))))

(subclass DistilledAlcoholicBeverage AlcoholicBeverage)
(documentation DistilledAlcoholicBeverage "An &%AlcoholicBeverage that has
had some part of its &%Water content removed by distillation.  This class
covers drinks of unmixed, hard liquor.")

(=>
   (instance ?BEVERAGE DistilledAlcoholicBeverage)
   (exists (?REMOVE ?WATER)
      (and
         (instance ?REMOVE Removing)
         (patient ?REMOVE ?WATER)
         (instance ?WATER Water)
         (origin ?REMOVE ?BEVERAGE))))

(subclass Whiskey DistilledAlcoholicBeverage)
(documentation Whiskey "A &%DistilledAlcoholicBeverage that is prepared by
distilling fermented grain mash.")

(subclass Beer AlcoholicBeverage)
(documentation Beer "An &%AlcoholicBeverage that is prepared by fermenting
malt and hops.")

(subclass SpinalColumn Organ)
(subclass SpinalColumn AnimalAnatomicalStructure)
(documentation SpinalColumn "A flexible column made out of bones called
vertebrae. The main function of the &%SpinalColumn is to protect the
spinal cord.")

(<=>
   (instance ?VERT Vertebrate)
   (exists (?SPINE)
      (and
         (instance ?VERT Animal)
         (component ?SPINE ?VERT)
         (instance ?SPINE SpinalColumn))))

(subclass Skin BodyCovering)
(subclass Skin AnimalAnatomicalStructure)
(documentation Skin "A BodyCovering that comprises part of the surface
of &%Animals.")

(=>
   (instance ?SKIN Skin)
   (exists (?SURFACE ?ANIMAL)
      (and
         (surface ?SURFACE ?ANIMAL)
         (part ?SKIN ?ANIMAL)
         (instance ?ANIMAL Animal)
         (overlapsSpatially ?SKIN ?SURFACE))))

(subclass BronchialDuct BodyVessel)
(subclass BronchialDuct AnimalAnatomicalStructure)
(documentation BronchialDuct "Any &%BodyVessel which is located in a
&%Lung and which carries oxygen from the trachea to the alveoli.")

(=>
   (instance ?DUCT BronchialDuct)
   (exists (?LUNG)
      (and
         (instance ?LUNG Lung)
         (located ?DUCT ?LUNG))))

(subclass BloodVessel BodyVessel)
(subclass BloodVessel AnimalAnatomicalStructure)
(documentation BloodVessel "Any &%BodyVessel which is used to circulate
&%Blood from one part of the body to another.")

(=>
   (instance ?VESSEL BloodVessel)
   (exists (?BLOOD ?TRANSFER)
      (and
         (instance ?BLOOD Blood)
         (instance ?TRANSFER Transfer)
         (patient ?TRANSFER ?BLOOD)
         (instrument ?TRANSFER ?VESSEL))))

(subclass Artery BloodVessel)
(documentation Artery "Any &%BloodVessel which transfers &%Blood from
the &%Heart to the extremities of the body.")

(=>
   (and
      (instance ?ARTERY Artery)
      (instance ?TRANSFER Transfer)
      (patient ?TRANSFER ?BLOOD)
      (instrument ?TRANSFER ?ARTERY)
      (instance ?BLOOD Blood))
   (exists (?HEART)
      (and
         (instance ?HEART Heart)
         (origin ?TRANSFER ?HEART))))

(subclass PulmonaryArtery Artery)
(documentation PulmonaryArtery "An &%Artery that carries &%Blood from
the &%Heart to a &%Lung.")

(=>
   (and
      (instance ?ARTERY PulmonaryArtery)
      (instance ?TRANSFER Transfer)
      (patient ?TRANSFER ?BLOOD)
      (instrument ?TRANSFER ?ARTERY)
      (instance ?BLOOD Blood))
   (exists (?LUNG)
      (and
         (instance ?LUNG Lung)
         (destination ?TRANSFER ?LUNG))))

(subclass Lung Organ)
(subclass Lung AnimalAnatomicalStructure)
(documentation Lung "A respiratory organ of &%Vertebrates.  Its function is
to furnish the blood with oxygen and to remove carbon dioxide.")

(=>
   (instance ?VERT Vertebrate)
   (exists (?LUNG)
      (and
         (component ?LUNG ?VERT)
         (instance ?LUNG Lung))))

(=>
   (capability Breathing experiencer ?ANIMAL)
   (exists (?LUNG)
      (and
         (component ?LUNG ?ANIMAL)
         (instance ?LUNG Lung))))

(subclass Heart Organ)
(subclass Heart AnimalAnatomicalStructure)
(documentation Heart "The &%Organ that pumps &%Blood throughout the body.")

(=>
   (instance ?HEART Heart)
   (exists (?TRANSFER ?BLOOD)
      (and
         (instance ?TRANSFER Transfer)
         (instance ?BLOOD Blood)
         (instrument ?TRANSFER ?HEART)
         (patient ?TRANSFER ?BLOOD))))

(subclass Liver Organ)
(subclass Liver AnimalAnatomicalStructure)
(documentation Liver "An &%Organ that secretes bile and serves metabolic
functions.")

(subclass Mouth AnimalAnatomicalStructure)
(subclass Mouth BodyPart)
(documentation Mouth "Part of the &%Face, used for &%Ingesting &%Food
and &%Vocalizing.")

(=>
   (instance ?MOUTH Mouth)
   (exists (?FACE)
      (and
         (instance ?FACE Face)
         (part ?FACE ?MOUTH))))

(subclass Tongue AnimalAnatomicalStructure)
(subclass Tongue BodyPart)
(documentation Tongue "Part of the &%Mouth, used for &%Tasting &%Food,
&%Vocalizing, and the initial stage of &%Digesting.")

(=>
   (instance ?TONGUE Tongue)
   (exists (?MOUTH)
      (and
         (instance ?MOUTH Mouth)
         (part ?TONGUE ?MOUTH))))

(subclass Tooth Bone)
(documentation Tooth "Part of the &%Mouth, used for biting and chewing.")

(=>
   (instance ?TOOTH Tooth)
   (exists (?MOUTH)
      (and
         (instance ?MOUTH Mouth)
         (part ?TOOTH ?MOUTH))))

(subclass Chewing BodyMotion)
(documentation Chewing "Breaking up or mashing &%Food with one's teeth.")

(=>
   (and
      (instance ?CHEW Chewing)
      (resource ?CHEW ?FOOD))
   (instance ?FOOD Food))

(=>
   (and
      (instance ?CHEW Chewing)
      (instrument ?CHEW ?TOOTH))
   (instance ?TOOTH Tooth))

(=>
   (instance ?CHEW Chewing)
   (exists (?EAT)
      (and
         (instance ?EAT Eating)
         (subProcess ?CHEW ?EAT))))

(subclass Lip AnimalAnatomicalStructure)
(subclass Lip BodyPart)
(documentation Lip "Folds of &%Tissue surrounding the mouths of some
&%Vertebrates.")

(=>
   (instance ?LIP Lip)
   (exists (?MOUTH)
      (and
         (instance ?MOUTH Mouth)
         (part ?LIP ?MOUTH))))

(subclass Kissing Touching)
(documentation Kissing "The class of &%Touching processes where the lips
of two persons are brought into contact with each other.")

(=>
   (instance ?KISS Kissing)
   (exists (?PERSON1 ?PERSON2 ?LIP1 ?LIP2)
      (and
         (agent ?KISS ?PERSON1)
         (agent ?KISS ?PERSON2)
         (instance ?PERSON1 Human)
         (instance ?PERSON2 Human)
         (not (equal ?PERSON1 ?PERSON2))
         (instance ?LIP1 Lip)
         (instance ?LIP2 Lip)
         (part ?LIP1 ?PERSON1)
         (part ?LIP2 ?PERSON2)
         (holdsDuring (BeginFn (WhenFn ?KISS)) (not (meetsSpatially ?LIP1 ?LIP2)))
         (holdsDuring (EndFn (WhenFn ?KISS)) (meetsSpatially ?LIP1 ?LIP2)))))

(subclass Skeleton AnimalAnatomicalStructure)
(subclass Skeleton BodyPart)
(documentation Skeleton "The system of &%Bones that make up the supporting structure
of &%Vertebrates.")

(=>
   (and
      (instance ?ANIMAL Animal)
      (instance ?SKELETON Skeleton)
      (part ?SKELETON ?ANIMAL))
   (instance ?ANIMAL Vertebrate))

(<=>
   (instance ?BONE Bone)
   (exists (?SKELETON)
      (and
         (instance ?SKELETON Skeleton)
         (part ?BONE ?SKELETON))))

(subclass Throat AnimalAnatomicalStructure)
(subclass Throat BodyVessel)
(documentation Throat "A &%BodyVessel which connects the &%Mouth to the
lungs and stomach.")

(=>
   (instance ?THROAT Throat)
   (exists (?MOUTH)
      (and
         (instance ?MOUTH Mouth)
         (connected ?THROAT ?MOUTH))))

(subclass Hair AnimalAnatomicalStructure)
(documentation Hair "A filament that covers part of the body of many
&%Mammals.")

(=>
   (instance ?HAIR Hair)
   (exists ( ?MAMMAL ?TIME)
      (and
         (instance ?MAMMAL Mammal)
         (holdsDuring ?TIME (part ?HAIR ?MAMMAL)))))

(subclass HairRemoval Removing)
(docmentation HairRemoval "&%Removing (some or all) the &%Hair from the
body of an &%Animal.  Note that this covers shaving hair, cutting hair,
pulling hair out by the roots, etc.")

(=>
   (and
      (instance ?REMOVE HairRemoval)
      (resource ?REMOVE ?HAIR))
   (instance ?HAIR Hair))

(subclass Brain Organ)
(subclass Brain AnimalAnatomicalStructure)
(documentation Brain "The seat of the central nervous system.")

(subclass Stomach Organ)
(subclass Stomach AnimalAnatomicalStructure)
(documentation Stomach "A muscular sac that is the principal organ of
digestion.")

(=>
   (instance ?STOMACH Stomach)
   (capability Digesting instrument ?STOMACH))

(subclass Hypothalamus BodyPart)
(subclass Hypothalamus AnimalAnatomicalStructure)
(documentation Hypothalamus "The part of the &%Brain lying below the
thalamus that serves to regulate &%AutonomicProcesses.")

(=>
   (instance ?HYPO Hypothalamus)
   (exists (?BRAIN)
      (and
         (instance ?BRAIN Brain)
         (part ?HYPO ?BRAIN))))

(subclass Eye Organ)
(subclass Eye AnimalAnatomicalStructure)
(documentation Eye "The &%Organ of sight.")

(=>
   (instance ?EYE Eye)
   (capability Seeing instrument ?EYE))

(=>
   (instance ?EYE Eye)
   (exists (?HEAD)
      (and
         (instance ?HEAD Head)
         (part ?EYE ?HEAD))))

(subclass Ear Organ)
(subclass Ear AnimalAnatomicalStructure)
(documentation Ear "The &%Organ of hearing.")

(=>
   (instance ?EAR Ear)
   (capability Hearing instrument ?EAR))

(=>
   (instance ?EAR Ear)
   (exists (?HEAD)
      (and
         (instance ?HEAD Head)
         (part ?EAR ?HEAD))))

(subclass Nose Organ)
(subclass Nose AnimalAnatomicalStructure)
(documentation Nose "The &%Organ of &%Smelling.")

(=>
   (instance ?NOSE Nose)
   (capability Smelling instrument ?NOSE))

(=>
   (instance ?NOSE Nose)
   (exists (?FACE)
      (and
         (instance ?FACE Face)
         (part ?NOSE ?FACE))))

(subclass ThyroidGland Gland)
(documentation ThyroidGland "A &%Gland in the neck that produces
&%HormoneTSH, which regulates body weight, metabolic rate, etc.")

(subclass HormoneTSH Hormone)
(documentation HormoneTSH "A &%Hormone secreted by the &%ThyroidGland.")

(=>
   (instance ?HORMONE HormoneTSH)
   (exists (?PROC ?GLAND)
      (and
         (instance ?GLAND ThyroidGland)
         (instrument ?PROC ?GLAND)
         (result ?PROC ?HORMONE))))

(subclass Arm Limb)
(documentation Arm "The upper &%Limbs of a &%Primate.")

(=>
   (instance ?ARM Arm)
   (exists (?PRIMATE)
      (and
         (instance ?PRIMATE Primate)
         (part ?ARM ?PRIMATE))))

(subclass Hand AnimalAnatomicalStructure)
(subclass Hand BodyPart)
(documentation Hand "The grasping, fingered part of an upper limb of a
&%Primate.")

(=>
   (instance ?HAND Hand)
   (exists (?ARM)
      (and
         (instance ?ARM Arm)
         (part ?HAND ?ARM))))

(subclass Finger AnimalAnatomicalStructure)
(subclass Finger BodyPart)
(documentation Finger "The five extremities of &%Hands.")

(=>
   (instance ?FINGER Finger)
   (exists (?HAND)
      (and
         (instance ?HAND Hand)
         (part ?FINGER ?HAND))))

(subclass Limb AnimalAnatomicalStructure)
(subclass Limb BodyPart)
(documentation Limb "Any of the limbs of a &%Vertebrate.")

(=>
   (instance ?LIMB Limb)
   (exists (?VERTEBRATE)
      (and
         (instance ?VERTEBRATE Vertebrate)
         (part ?LIMB ?VERTEBRATE))))

(subclass Snake Reptile)
(documentation Snake "A long and narrow &%Reptile which lacks &%Limbs.")

(=>
   (instance ?SNAKE Snake)
   (not (exists (?LIMB)
      (and
         (instance ?LIMB Limb)
         (part ?LIMB ?SNAKE)))))

(subclass ConstrictorSnake Snake)
(documentation ConstrictorSnake "A &%Snake that lacks venom and kills its
prey by crushing it to death.")

(subclass Anaconda ConstrictorSnake)
(documentation Anaconda "A very large Boa that is found in South America.")

(subclass Bee Insect)
(documentation Bee "A hairy &%Insect, some species of which produce honey
and/or sting.")

(subclass BumbleBee Bee)
(documentation BumbleBee "A large &%Bee which lacks a stinger.")

(subclass QueenInsect Insect)
(documentation QueenInsect "A &%Female &%Insect which is the sole member of
her colony with the capability to reproduce.")

(=>
   (instance ?INSECT QueenInsect)
      (and
         (attribute ?INSECT Female)
         (capability Replication agent ?INSECT)))

(=>
   (instance ?INSECT QueenInsect)
   (exists (?GROUP)
      (and
         (instance ?GROUP Group)
         (member ?INSECT ?GROUP)
         (not (exists (?MEMBER)
                 (and
                    (member ?MEMBER ?GROUP)
                    (capability Replication agent ?MEMBER)
                    (not (equal ?MEMBER ?INSECT))))))))

(subclass Leg Limb)
(documentation Leg "The lower &%Limbs of &%Primates.")

(=>
   (instance ?LEG Leg)
   (exists (?PRIMATE)
      (and
         (instance ?PRIMATE Primate)
         (part ?LEG ?PRIMATE))))

(subclass Foot AnimalAnatomicalStructure)
(subclass Foot BodyPart)
(documentation Foot "The lower part of a &%Limb, the part which makes contact
with the ground in locomotion of the &%Animal.")

(=>
   (instance ?FOOT Foot)
   (exists (?LIMB)
      (and
         (instance ?LIMB Leg)
         (part ?FOOT ?LIMB))))

(subclass Toe AnimalAnatomicalStructure)
(subclass Toe BodyPart)
(documentation Toe "The five extremities of a &%Foot.")

(=>
   (instance ?TOE Toe)
   (exists (?FOOT)
      (and
         (instance ?FOOT Foot)
         (part ?TOE ?FOOT))))

(subclass Knee AnimalAnatomicalStructure)
(subclass Knee BodyJunction)
(documentation Knee "The joint in the &%Leg connecting the tibia and fibula
with the femur.")

(=>
   (instance ?KNEE Knee)
   (exists (?LEG)
      (and
         (instance ?LEG Leg)
         (part ?KNEE ?LEG))))

(subclass Shoulder AnimalAnatomicalStructure)
(subclass Shoulder BodyPart)
(documentation Shoulder "The part of a &%Primate between the &%Arm and
the neck.")

(=>
   (instance ?SHOULDER Shoulder)
   (exists (?PRIMATE)
      (and
         (instance ?PRIMATE Primate)
         (part ?SHOULDER ?PRIMATE))))

(subclass Torso AnimalAnatomicalStructure)
(subclass Torso BodyPart)
(documentation Torso "The body of a &%Primate excluding its &%Limbs.")

(=>
   (and
      (instance ?TORSO Torso)
      (instance ?LIMB Limb))
   (not (overlapsSpatially ?TORSO ?LIMB)))

(subclass Head AnimalAnatomicalStructure)
(subclass Head BodyPart)
(documentation Head "The part of the body containing the sense organs and
the brain.")

(subclass Neck AnimalAnatomicalStructure)
(subclass Neck BodyPart)
(documentation Neck "The part of the body that connects the &%Head to the
rest of the body.")

(=>
   (instance ?NECK Neck)
   (exists (?HEAD)
      (and
         (instance ?HEAD Head)
         (connected ?NECK ?HEAD))))

(subclass Face AnimalAnatomicalStructure)
(subclass Face BodyPart)
(documentation Face "The part of the &%Head from forehead to chin and
from ear to ear.")

(=>
   (instance ?FACE Face)
   (exists (?HEAD)
      (and
         (instance ?HEAD Head)
         (part ?FACE ?HEAD))))

(=>
   (instance ?FACE Face)
   (exists (?VERTEBRATE)
      (and
         (instance ?VERTEBRATE Vertebrate)
         (part ?FACE ?VERTEBRATE))))

(subclass Chin AnimalAnatomicalStructure)
(subclass Chin BodyPart)
(documentation Chin "A part of the &%Face which protrudes slightly and which
is lower than all other parts of the &%Face.")

(=>
   (instance ?CHIN Chin)
   (exists (?FACE)
      (and
         (instance ?FACE Face)
         (part ?CHIN ?FACE))))

(=>
   (instance ?CHIN Chin)
   (forall (?PART)
      (=>
         (and
            (part ?PART ?FACE)
            (not (part ?PART ?CHIN)))
         (orientation ?PART ?CHIN Below))))


(subclass ExpressingApproval Expressing)
(documentation ExpressingApproval "&%Expressing favor about a physical thing
or a state of affairs.")

(=>
   (and
      (instance ?EXPRESS ExpressingApproval)
      (agent ?EXPRESS ?AGENT)
      (patient ?EXPRESS ?THING))
   (or
      (wants ?AGENT ?THING)
      (desires ?AGENT ?THING)))

(subclass ExpressingDisapproval Expressing)
(documentation ExpressingDisapproval "&%Expressing disfavor about a physical
thing or a state of affairs.")

(=>
   (and
      (instance ?EXPRESS ExpressingDisapproval)
      (agent ?EXPRESS ?AGENT)
      (patient ?EXPRESS ?THING))
   (or
      (dislikes ?AGENT ?THING)
      (disapproves ?AGENT ?THING)))

(subclass FacialExpression Gesture)
(documentation FacialExpression "Any &%Gesture whose &%instrument is the &%Face.")

(=>
   (and
      (instance ?EXPRESS FacialExpression)
      (agent ?EXPRESS ?AGENT))
   (exists (?FACE)
      (and
         (part ?FACE ?AGENT)
         (instance ?FACE Face)
         (instrument ?EXPRESS ?FACE))))

(subclass Smiling FacialExpression)
(documentation Smiling "Spreading the lips in such a way as to convey
happiness.")

(=>
   (and
      (instance ?SMILE Smiling)
      (agent ?SMILE ?AGENT))
   (holdsDuring (WhenFn ?SMILE) (attribute ?AGENT Happiness)))

(subclass Frowning FacialExpression)
(documentation Frowning "Furrowing the forehead in such a way as to convey
unhappiness.")

(=>
   (and
      (instance ?FROWN Frowning)
      (agent ?FROWN ?AGENT))
   (holdsDuring (WhenFn ?FROWN) (attribute ?AGENT Unhappiness)))

(subclass Laughing Vocalizing)
(subclass Laughing FacialExpression)
(documentation Laughing "Expressing happiness by &%Vocalizing in a
certain way.")

(=>
   (instance ?LAUGH Laughing)
   (exists (?SMILE)
      (and
         (instance ?SMILE Smiling)
         (subProcess ?SMILE ?LAUGH))))

(subclass Weeping FacialExpression)
(documentation Weeping "&%Expressing unhappiness by shedding tears.")

(=>
   (and
      (instance ?WEEP Weeping)
      (agent ?WEEP ?AGENT))
   (holdsDuring (WhenFn ?WEEP) (attribute ?AGENT Unhappiness)))

(subclass Nodding Gesture)
(documentation Nodding "Moving the &%Head up and down or side to side
to indicate approval or disapproval.")

(=>
   (and
      (instance ?NOD Nodding)
      (patient ?NOD ?HEAD))
   (instance ?HEAD Head))

(subclass Waving Gesture)
(documentation Waving "Moving a &%Hand to indicate a greeting, farewell,
recognition, goodwill, etc.")

(=>
   (and
      (instance ?WAVE Waving)
      (patient ?WAVE ?HAND))
   (instance ?HAND Hand))

(subclass Bowing Gesture)
(subclass Bowing MotionDownward)
(documentation Bowing "Any downward motion of the body that indicates respect
for or submission to another &%Agent.")

(subclass Ducking IntentionalProcess)
(subclass Ducking BodyMotion)
(subclass Ducking MotionDownward)
(documentation Ducking "Purposely moving one's body downward in such a way as
to avoid being hit by something.")

(=>
   (and
      (instance ?MOTION Ducking)
      (agent ?MOTION ?AGENT))
   (hasPurpose ?MOTION (not (exists (?IMPACT)
                          (and
                             (instance ?IMPACT Impacting)
                             (patient ?IMPACT ?AGENT))))))

(subclass Thanking ExpressingInLanguage)
(documentation Thanking "Any &%ExpressingInLanguage of appreciation to a person
for something that the person did in the past.")

(=>
   (and
      (instance ?THANK Thanking)
      (agent ?THANK ?AGENT)
      (patient ?THANK ?THING)
      (destination ?THANK ?PERSON))
   (and
      (instance ?PERSON Human)
      (or
         (holdsDuring (WhenFn ?THANK) (wants ?AGENT ?THING))
         (holdsDuring (WhenFn ?THANK) (desires ?AGENT ?THING)))))

(subclass Greeting Expressing)
(documentation Greeting "Any instance of &%Expressing an acknowledgment of a
person's arrival.  Note that this class is not a subclass of &%ExpressingInLanguage,
because it covers gestures of greeting, e.g. &%Waving and &%Nodding in certain
circumstances.")

(subrelation half part)
(documentation half "(&%half ?HALF ?WHOLE) means that ?HALF is one half
of ?WHOLE.")

(=>
   (half ?HALF ?WHOLE)
   (exists (?OTHER)
      (and
         (half ?OTHER ?WHOLE)
         (not (equal ?OTHER ?HALF))
         (equal ?WHOLE (MereologicalSumFn ?HALF ?OTHER)))))

(subrelation most part)
(documentation most "(&%most ?MOST ?WHOLE) means that ?MOST is a &%part
of ?WHOLE that is greater than &%half of ?WHOLE.")

(=>
   (most ?MOST ?WHOLE)
   (exists (?HALF ?NUMBER1 ?NUMBER2 ?UNIT)
      (and
         (half ?HALF ?WHOLE)
         (measure ?HALF (MeasureFn ?NUMBER1 ?UNIT))
         (measure ?MOST (MeasureFn ?NUMBER2 ?UNIT))
         (greaterThan ?NUMBER2 ?NUMBER1))))

(subclass Blueprint Icon)
(documentation Blueprint "An &%Icon which is a scale model of an &%Artifact,
whether the &%Artifact actually exists or not.")

(=>
   (instance ?PLAN Blueprint)
   (exists (?ARTIFACT)
      (and
         (instance ?ARTIFACT Artifact)
         (represents ?PLAN ?ARTIFACT))))

(subclass GraphIcon Icon)
(documentation GraphIcon "An &%Icon which depicts one or more quantities.")

(=>
   (instance ?GRAPH Graph)
   (exists (?QUANTITY)
      (and
         (instance ?QUANTITY PhysicalQuantity)
         (refers ?GRAPH ?QUANTITY))))

(subclass Flag Icon)
(documentation Flag "An &%Icon made of &%Fabric that refers to a particular
&%GeopoliticalArea.")

(=>
   (instance ?FLAG Flag)
   (exists (?FABRIC)
      (and
         (instance ?FABRIC Fabric)
         (part ?FABRIC ?FLAG))))

(=>
   (instance ?FLAG Flag)
   (exists (?AREA)
      (and
         (instance ?AREA GeopoliticalArea)
         (refers ?FLAG ?AREA))))

(subclass ArrowIcon Icon)
(documentation ArrowIcon "An &%Icon which has the shape of an arrow and which
is used to indicate direction or a relationship betwee two things.")

(subclass Photograph Icon)
(documentation Photograph "An &%Icon that is the result of a process of
&%Photographing.")

(subclass Photographing ContentDevelopment)
(documentation Photographing "&%ContentDevelopment where the &%instrument
is a camera and the &%result is a &%Photograph.")

(=>
   (instance ?SHOOT Photographing)
   (exists (?PHOTO)
      (and
         (instance ?PHOTO Photograph)
         (result ?SHOOT ?PHOTO)
         (instrument ?SHOOT ?CAMERA)
         (instance ?CAMERA Camera))))

(subclass Camera Device)
(documentation Camera "A &%Device which is capable of &%Photographing.")

(=>
   (instance ?CAMERA Camera)
   (capability Photographing instrument ?CAMERA))

(subclass Composing ContentDevelopment)
(documentation Composing "&%ContentDevelopment which results in a
&%MusicalComposition.")

(=>
   (instance ?COMPOSE Composing)
   (exists (?MUSIC)
      (and
         (instance ?MUSIC MusicalComposition)
         (result ?COMPOSE ?MUSIC))))

(subclass TonMass MassMeasure)
(instance TonMass UnitOfMeasure)
(documentation TonMass "English mass unit that is equal to 2000 pounds.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER TonMass)
        (MeasureFn (MultiplicationFn ?NUMBER 2000) PoundMass)))

(subclass Page InformationMeasure)
(instance Page UnitOfMeasure)
(documentation Page "A single page of &%Text.")

(subclass LiquorShot VolumeMeasure)
(instance LiquorShot UnitOfMeasure)
(documentation LiquorShot "A &%UnitOfMeasure used in preparing &%AlcoholicBeverages.")

(subclass Acre AreaMeasure)
(instance Acre UnitOfMeasure)
(documentation Acre "A &%UnitOfMeasure equal to 4840 square yards.")

(subclass MusicalComposition Text)
(documentation MusicalComposition "A &%Text that expresses the notes,
words, etc. of a song or other sort of &%Music.")

(=>
   (and
      (instance ?COMP MusicalComposition)
      (containsInformation ?COMP ?INFO)
      (realization ?MUSIC ?INFO))
   (instance ?MUSIC Music))

(subclass DeviceAttribute ObjectiveNorm)
(documentation DeviceAttribute "This class contains two &%Attributes to
indicate whether a &%Device is or is not behaving as it is intended to
behave, &%Functioning and &%Malfunctioning.")

(=>
   (and
      (attribute ?DEVICE ?ATTRIBUTE)
      (instance ?ATTRIBUTE DeviceAttribute))
   (instance ?DEVICE Device))

(instance Functioning DeviceAttribute)
(contraryAttribute Functioning Malfunctioning)
(documentation Functioning "Indicates that a &%Device is performing its
intended function.")

(=>
   (and
      (attribute ?DEVICE Functioning)
      (hasPurpose ?DEVICE ?PROP))
   (true ?PROP True))

(instance Malfunctioning DeviceAttribute)
(documentation Malfunctioning "Indicates that a &%Device is not performing
its intended function.")

(=>
   (and
      (attribute ?DEVICE Malfunctioning)
      (hasPurpose ?DEVICE ?PROP))
   (true ?PROP False))

(instance LegislativeBill DeonticAttribute)
(documentation LegislativeBill "The &%Attribute of being a proposed law,
i.e. being under consideration by a legislative body of &%Government.")

(=>
   (holdsDuring ?TIME1 (modalAttribute ?TEXT Law))
   (exists (?TIME2)
      (and
         (holdsDuring ?TIME2 (attribute ?TEXT LegislativeBill))
         (earlier ?TIME2 ?TIME1))))

(subclass PassingABill PoliticalProcess)
(subclass PassingABill Declaring)
(documentation PassingABill "The &%Process of converting a &%LegislativeBill
into &%Law by a duly authorized legislative body of &%Government.")

(=>
   (instance ?ORG LegislativeOrganization)
   (capability PassingABill agent ?ORG))

(=>
   (and
      (instance ?PASS PassingABill)
      (patient ?PASS ?TEXT))
   (and
      (holdsDuring (BeginFn (WhenFn ?PASS)) (attribute ?TEXT LegislativeBill))
      (holdsDuring (EndFn (WhenFn ?PASS)) (attribute ?TEXT Law))))

(subAttribute InternationalLaw Law)
(documentation InternationalLaw "An &%Attribute that applies to &%Propositions
that express &%Laws concerning the relations between &%Nations.")

(subclass CriminalAction IntentionalProcess)
(documentation CriminalAction "Any &%IntentionalProcess that violates a &%Law.")

(=>
   (instance ?ACTION CriminalAction)
   (exists (?LAW ?CONTENT ?CRIME)
      (and
         (modalAttribute ?LAW Law)
         (containsInformation ?LAW ?CONTENT)
         (realization ?ACTION ?CRIME)
         (not (consistent ?CONTENT ?CRIME)))))

(subclass Statement Sentence)
(documentation Statement "A &%Sentence that is stated to be true.")

(=>
   (and
      (instance ?STATE Stating)
      (result ?STATE ?SENTENCE)
      (instance ?SENTENCE Sentence))
   (instance ?SENTENCE Statement))

(subclass Fact Statement)
(documentation Fact "The class of &%Statements that are &%True.")

(=>
   (instance ?FACT Fact)
   (true ?FACT True))

(subclass Question Sentence)
(documentation Question "An interrogative &%Sentence, a &%Sentence that
poses a question.")

(=>
   (and
      (instance ?QUESTION Questioning)
      (result ?QUESTION ?SENTENCE)
      (instance ?SENTENCE Sentence))
   (instance ?SENTENCE Question))

(subclass Supposition Sentence)
(documentation Supposition "A &%Sentence that is assumed to be true, possibly
just for the sake of argument.")

(=>
   (and
      (instance ?SUPPOSE Supposing)
      (result ?SUPPOSE ?SENTENCE)
      (instance ?SENTENCE Sentence))
   (instance ?SENTENCE Supposition))

(subclass Request Sentence)
(documentation Request "A &%Sentence that expresses a request for something or
that something be done.")

(=>
   (and
      (instance ?REQUEST Requesting)
      (result ?REQUEST ?SENTENCE)
      (instance ?SENTENCE Sentence))
   (instance ?SENTENCE Request))

(subclass Order Sentence)
(documentation Order "A &%Sentence that expresses an order for something or
that something be done.")

(=>
   (and
      (instance ?ORDER Ordering)
      (result ?ORDER ?SENTENCE)
      (instance ?SENTENCE Sentence))
   (instance ?SENTENCE Order))

(subclass SoundRecording Text)
(documentation SoundRecording "Any &%Text which is a recording of
&%RadiatingSound.")

(=>
   (instance ?RECORD SoundRecording)
   (exists (?INFO ?SOUND)
      (and
         (containsInformation ?RECORD ?INFO)
         (realization ?SOUND ?INFO)
         (instance ?SOUND RadiatingSound))))

(subclass RecordAlbum SoundRecording)
(documentation RecordAlbum "A &%SoundRecording that has the form of a
plastic or glass disk with continuous grooves that are transformed into
sound by a record player.")

(subclass Label Text)
(documentation Label "A very brief &%Text that is attached to an &%Object
and that indicates very specific information about the &%Object, e.g. its
name, its &%monetaryValue, etc.")

(=>
   (instance ?LABEL Label)
   (exists (?OBJ)
      (and
         (instance ?OBJ SelfConnectedObject)
         (connected ?LABEL ?OBJ)
         (refers ?LABEL ?OBJ))))

(subclass Form Text)
(documentation Form "A page or set of pages containing spaces where
information is to be entered by an &%Agent.")

(subclass TaxReturn Form)
(documentation TaxReturn "A &%Form that is used for calculating the amount
of income tax owed in a given year.")

(=>
   (instance ?RETURN TaxReturn)
   (hasPurpose ?RETURN (exists (?CALCULATE ?AMOUNT ?TAX)
                          (and
                             (instance ?CALULATE Calculating)
                             (instrument ?CALCULATE ?RETURN)
                             (result ?CALCULATE ?AMOUNT)
                             (transactionAmount ?TAX ?AMOUNT)
                             (instance ?TAX Tax)))))

(subclass Application Form)
(documentation Application "A &%Form whose purpose is to obtain admission
to an &%Organization or to receive assistance from an &%Organization.")

(=>
   (instance ?APP Application)
   (hasPurpose ?APP (exists (?JOIN ?GIVE)
                       (or
                          (instance ?JOIN JoiningAnOrganization)
                          (instance ?GIVE UnilateralGiving)))))

(subclass MotionPictureShot MotionPicture)
(documentation MotionPictureShot "A unit of action in a &%MotionPicture, a
&%MotionPictureShot is a sequence of images which are captured by a single
camera without interruption.")

(subclass BroadcastProgram Series)
(documentation BroadcastProgram "A &%Series of episodes that are broadcast
on television or radio.")

(=>
   (instance ?PROGRAM BroadcastProgram)
   (exists (?BROADCAST)
      (and
         (instance ?BROADCAST Broadcasting)
         (patient ?BROADCAST ?PROGRAM))))

(subclass NewsProgram BroadcastProgram)
(documentation NewsProgram "A &%BroadcastProgram that is devoted to
reporting the latest events in a city, region, nation or the world at
large.")

(=>
   (and
      (subclass ?PROGRAM NewsProgram)
      (equal ?EPISODE (SeriesVolumeFn ?PROGRAM ?NUMBER)))
   (exists (?DISSEMINATE)
      (and
         (instance ?DISSEMINATE Disseminating)
         (patient ?DISSEMINATE ?EPISODE))))

(subclass Chapter Article)
(documentation Chapter "A numbered and/or titled section of a &%Book, which is
typically indicated in a table of contents for the &%Book.")

(=>
   (instance ?CHAPTER Chapter)
   (exists (?BOOK)
      (and
         (instance ?BOOK Book)
         (subsumesContentInstance ?BOOK ?CHAPTER))))

(subrelation titles names)
(domain titles 1 SymbolicString)
(domainSubclass titles 2 Text)
(documentation titles "A predicate used to indicate the title of a &%Text.
Note that the second argument type restriction is a subclass, rather than
an instance, of &%Text.  Thus, the title Murder_on_the_Orient_Express
corresponds to a large class of &%Books, and not just to a single copy of
the book.")

(subclass Report FactualText)
(subclass Report Article)
(documentation Report "A relatively brief &%FactualText, often it
describes the findings of a study or experiment, or a series of
observations.")

(subclass Newspaper Periodical)
(documentation Newspaper "A &%Periodical that is published on a daily or
weekly basis, that contains &%Reports, and whose issues are printed on
newsprint paper.")

(=>
   (instance ?PAPER Newspaper)
   (exists (?REPORT)
      (and
         (instance ?REPORT Report)
         (subsumesContentInstance ?PAPER ?REPORT))))

(=>
   (and
      (subclass ?PAPER Newspaper)
      (instance ?WEEK Week))
   (exists (?PUBLICATION)
      (and
         (instance ?PUBLICATION Publication)
         (temporalPart (WhenFn ?PUBLICATION) ?WEEK)
         (result ?PUBLICATION ?ISSUE)
         (instance ?ISSUE ?PAPER))))

(subclass Magazine Periodical)
(documentation Magazine "A &%Periodical that is softbound and printed on
glossy paper.")

(subclass Letter FactualText)
(documentation Letter "A brief message which is intended to be mailed
to a person or &%Organization.")

(subclass HistoricalAccount FactualText)
(documentation HistoricalAccount "A &%FactualAccount that describes
significant events that occurred in the past.")

(=>
   (instance ?ACCOUNT HistoricalAccount)
   (exists (?EVENT)
      (and
         (represents ?ACCOUNT ?EVENT)
         (earlier (WhenFn ?EVENT) (WhenFn ?ACCOUNT)))))

(subclass FinancialText Report)
(documentation FinancialText "A &%Report about monetary figures.  This
class covers &%FinancialBills, balance sheets, account statements, etc.")

(subclass FinancialBill FinancialText)
(documentation FinancialBill "A brief statement that the stated amount
of money is owed by the person to whom the bill is delivered.")

(subclass ReferenceBook Book)
(subclass ReferenceBook FactualText)
(documentation ReferenceBook "A &%Book which is not intended to be read
from cover to cover, but which is meant to be consulted to answer specific
factual questions, e.g. about the meaning of a word, the location of a
country, etc.")

(subclass Dictionary ReferenceBook)
(documentation Dictionary "A &%ReferenceBook which specifies the meanings
of the &%Words of a &%Language.")

(subclass NarrativeText Text)
(partition NarrativeText FictionalText HistoricalAccount)
(documentation NarrativeText "Any &%Text that tells a story, whether true
or false.")

(subclass ShortStory FictionalText)
(subclass ShortStory Article)
(documentation ShortStory "A brief work of fiction, often bound with other
short stories in a &%Book or &%Periodical.")

(subclass Novel FictionalText)
(subclass Novel Book)
(documentation Novel "A &%FictionalText that is larger than a &%ShortStory
and that is bound independently (i.e. it is a &%Book).")

(subclass DramaticPlay FictionalText)
(documentation DramaticPlay "A &%FictionalText that is intended to be realized
as &%DramaticActing.")

(=>
   (instance ?PLAY DramaticPlay)
   (hasPurpose ?PLAY (exists (?ACT ?PROP)
                        (and
                           (instance ?ACT DramaticActing)
                           (containsInformation ?PLAY ?PROP)
                           (realization ?ACT ?PROP)))))

(subclass Opera DramaticPlay)
(documentation Opera "A &%DramaticPlay that is set to &%Music.")

(=>
   (and
      (instance ?OPERA Opera)
      (realization ?ACT ?OPERA))
   (instance ?ACT Music))

(instance EnglishLanguage NaturalLanguage)
(documentation EnglishLanguage "A Germanic language that incorporates many roots
from the Romance languages.  It is the official language of the &%UnitedStates,
the &%UnitedKingdomOfGreatBritainAndNorthernIreland, and many other countries.")

(subclass Industry Collection)
(documentation Industry "The class of &%Collections of &%Corporations
which are in the same line of business.")

(=>
   (instance ?INDUSTRY Industry)
   (=>
      (and
         (member ?MEMB1 ?INDUSTRY)
         (member ?MEMB2 ?INDUSTRY))
      (exists (?CLASS)
         (and
            (subclass ?CLASS Corporation)
            (immediateInstance ?MEMB1 ?CLASS)
            (immediateInstance ?MEMB2 ?CLASS)))))

(subclass Steps StationaryArtifact)
(documentation Steps "A &%StationaryArtifact which allows one to climb, step
by step, from one level to another.")

(=>
   (instance ?STEPS Steps)
   (and
      (capability MotionUpward instrument ?STEPS)
      (capability MotionDownward instrument ?STEPS)))

(=>
   (and
      (instance ?LEVEL1 BuildingLevel)
      (instance ?LEVEL2 BuildingLevel)
      (instance ?BUILDING Building)
      (part ?LEVEL1 ?BUILDING)
      (part ?LEVEL2 ?BUILDING))
   (exists (?STEPS)
      (and
         (instance ?STEPS Steps)
         (connects ?STEPS ?LEVEL1 ?LEVEL2))))

(subclass Door Artifact)
(documentation Door "An &%Artifact that restricts and permits access to a
&%StationaryArtifact (e.g. &%Building or &%Room) depending on whether the
&%Door is open or locked.  Note that the class &%Door also covers gates,
because it is not possible to define objective criteria that reliably
distinguish doors from gates.")

(=>
   (instance ?DOOR Door)
   (exists (?ARTIFACT)
      (and
         (part ?DOOR ?WAY)
         (instance ?WAY Doorway))))

(subclass Doorway StationaryArtifact)
(documentation Doorway "A &%StationaryArtifact consisting of a frame that
holds a &%Door.")

(=>
   (instance ?WAY Doorway)
   (exists (?ARTIFACT)
      (and
         (part ?WAY ?ARTIFACT)
         (or
            (instance ?ARTIFACT Building)
            (instance ?ARTIFACT Room)))))

(subclass Window StationaryArtifact)
(documentation Window "A &%StationaryArtifact composed of transparent glass
or plastic that admits light (and possibly air) into a &%Room or &%Building.")

(=>
   (instance ?DOOR Door)
   (exists (?ARTIFACT)
      (and
         (part ?DOOR ?ARTIFACT)
         (or
            (instance ?ARTIFACT Building)
            (instance ?ARTIFACT Room)))))

(subclass Wall StationaryArtifact)
(documentation Wall "A &%StationaryArtifact that supports a &%Building or
partitions it into &%Rooms.")

(=>
   (instance ?WALL Wall)
   (exists (?ARTIFACT)
      (and
         (part ?WALL ?ARTIFACT)
         (or
            (instance ?ARTIFACT Building)
            (instance ?ARTIFACT Room)))))

(subclass Floor StationaryArtifact)
(documentation Floor "A &%StationaryArtifact that is the bottom surface
of a &%Room.")

(=>
   (instance ?FLOOR Floor)
   (exists (?ARTIFACT)
      (and
         (part ?FLOOR ?ARTIFACT)
         (instance ?ARTIFACT Room))))

(subclass Roof StationaryArtifact)
(documentation Roof "The &%top of a &%Building.")

(=>
   (instance ?ROOF Roof)
   (exists (?BUILDING)
      (and
         (instance ?BUILDING Building)
         (top ?ROOF ?BUILDING))))

(subclass BuildingLevel StationaryArtifact)
(documentation BuildingLevel "The story or level of a building, e.g. the &%Basement,
the &%Attic, the ground level, the fourteenth floor, etc.")

(=>
   (instance ?LEVEL BuildingLevel)
   (exists (?BUILDING)
      (and
         (instance ?BUILDING Building)
         (part ?LEVEL ?BUILDING))))

(subclass Basement BuildingLevel)
(documentation Basement "A &%BuildingLevel which satisfies two conditions, viz. it is
lower than all of the other &%BuildingLevels in the same &%Building and it is below
ground level.")

(=>
   (instance ?BASEMENT Basement)
   (not (exists (?LEVEL ?BUILDING)
      (and
         (instance ?LEVEL BuildingLevel)
         (instance ?BUILDING Building)
         (part ?LEVEL ?BUILDING)
         (part ?BASEMENT ?BUILDING)
         (not (equal ?LEVEL ?BASEMENT))
         (orientation ?LEVEL ?BASEMENT Below)))))

(subclass Garage StationaryArtifact)
(documentation Garage "A &%Building or part of a &%Building which is intended to house
one or more &%Automobiles.")

(=>
   (instance ?GARAGE Garage)
   (hasPurpose (exists (?AUTO)
                  (and
                     (instance ?AUTO Automobile)
                     (contains ?GARAGE ?Automobile)))))

(=>
   (instance ?GARAGE Garage)
   (exists (?BUILDING)
      (and
         (instance ?BUILDING Building)
         (part ?GARAGE ?BUILDING))))

(subclass Kitchen Room)
(documentation Kitchen "A &%Room intended for &%Cooking.")

(=>
   (instance ?ROOM Kitchen)
   (hasPurpose ?ROOM (exists (?COOK)
                        (and
                           (instance ?COOK Cooking)
                           (located ?COOK ?ROOM)))))

(subclass Bedroom Room)
(documentation Bedroom "A &%Room intended primarily for sleeping.")

(=>
   (instance ?ROOM Bedroom)
   (exists (?BED)
      (and
         (instance ?BED Bed)
         (located ?BED ?ROOM))))

(subclass Porch StationaryArtifact)
(documentation Porch "A &%StationaryArtifact which is &%connected to a
&%Building and which provides some shelter in entering or leaving the
&%Building or in sitting outside.")

(=>
   (instance ?PORCH Porch)
   (exists (?BUILDING)
      (and
         (instance ?BUILDING Building)
         (connected ?PORCH ?BUILDING))))

(subclass Sidewalk StationaryArtifact)
(documentation Sidewalk "A prepared path for pedestrians alongside a &%Roadway.")

(=>
   (instance ?SIDE Sidewalk)
   (hasPurpose ?SIDE (exists (?WALK)
                        (and
                           (instance ?WALK Walking)
                           (path ?WALK ?SIDE)))))

(=>
   (instance ?SIDE Sidewalk)
   (exists (?ROAD)
      (and
         (instance ?ROAD Roadway)
         (orientation ?SIDE ?ROAD Near))))

(subclass Fence StationaryArtifact)
(documentation Fence "A &%StationaryArtifact that serves to demarcate or
to prevent access to or from the area that the &%Fence surrounds.")

(subclass SportsGround StationaryArtifact)
(documentation SportsGround "A specially designated and maintained area
where &%Sports are played.")

(=>
   (instance ?GROUND SportsGround)
   (hasPurpose ?GROUND (exists (?SPORT)
                          (and
                             (instance ?SPORT Sport)
                             (located ?SPORT ?GROUND)))))

(subclass IndustrialPlant StationaryArtifact)
(documentation IndustrialPlant "A &%Building or part of a &%Building or group
of &%Buildings whose purpose is to &%Manufacture something.")

(=>
   (instance ?PLANT IndustrialPlant)
   (or
      (instance ?PLANT Building)
      (exists (?BUILDING)
         (and
            (instance ?BUILDING Building)
            (located ?BUILDING ?PLANT)))))

(=>
   (instance ?PLANT IndustrialPlant)
   (hasPurpose ?PLANT (exists (?MANUFACTURE)
                         (and
                            (instance ?MANUFACTURE Manufacture)
                            (located ?MANUFACTURE ?PLANT)))))

(subclass Laboratory StationaryArtifact)
(documentation Laboratory "A &%Building, &%Room or suite of &%Rooms where
scientific research, i.e. &%Experimenting, is conducted.")

(=>
   (instance ?LAB Laboratory)
   (exists (?EXPERIMENT)
      (and
         (instance ?EXPERIMENT Experimenting)
         (located ?EXPERIMENT ?LAB))))

(subclass Farm StationaryArtifact)
(documentation Farm "A &%StationaryArtifact consisting of a cultivated
&%LandArea and &%Buildings for maintaining the land and/or the &%Animals
on the land.")

(subclass Barn Building)
(disjoint Barn ResidentialBuilding)
(documentation Barn "A &%Building on a &%Farm that is used for keeping
&%DomesticAnimals, &%Fodder or harvested crops.")

(=>
   (instance ?BARN Barn)
   (exists (?FARM)
      (and
         (instance ?FARM Farm)
         (located ?BARN ?FARM))))

(subclass PerformanceStage StationaryArtifact)
(documentation PerformanceStage "A large platform for theatrical plays,
lectures, dances, music recitals, etc, which can be observed by an audience.")

(=>
   (instance ?STAGE PerformanceStage)
   (hasPurpose ?STAGE (exists (?PERF)
                         (and
                            (instance ?PERF Demonstrating)
                            (located ?PERF ?STAGE)))))

(=>
   (instance ?STAGE PerformanceStage)
   (exists (?AUDITORIUM)
      (and
         (instance ?AUDITORIUM Auditorium)
         (part ?STAGE ?AUDITORIUM))))

(subclass Magnetism RadiatingElectromagnetic)
(documentation Magnetism "Any instance of &%RadiatingElectromagnetic which
involves the attraction of &%Iron.")

(subclass RadioEmission RadiatingElectromagnetic)
(documentation RadioEmission "Any instance of &%RadiatingElectromagnetic
where the waves have a wavelength between 5 milimeters and 30,000 meters.")

(subclass Broadcasting Disseminating)
(subclass Broadcasting RadioEmission)
(documentation Broadcasting "&%Disseminating information by using a
&%CommunicationDevice that radiates &%RadioEmissions.")

(=>
   (instance ?BROADCAST Broadcasting)
   (exists (?DEVICE)
      (and
         (instance ?DEVICE CommunicationDevice)
         (instrument ?BROADCAST ?DEVICE))))

(subclass RadioBroadcasting Broadcasting)
(documentation RadioBroadcasting "Any instance of &%Broadcasting which is
intended to be received by a &%Radio.")

(=>
	(instance ?RADIO Radio)
      (capability RadioBroadcasting patient ?RADIO))

(subclass TelevisionBroadcasting Broadcasting)
(documentation TelevisionBroadcasting "Any instance of &%Broadcasting which
is intended to be received by a &%Television.")

(=>
	(instance ?TELEVISION Television)
      (capability TelevisionBroadcasting patient ?TELEVISION))

(subclass Antenna CommunicationDevice)
(documentation Antenna "A &%CommunicationDevice which enables or improves
the reception of &%RadioEmissions by another &%CommunicationDevice (the
radio or television receiver).")

(=>
   (instance ?ANTENNA Antenna)
   (capability RadioEmission instrument ?ANTENNA))

(subclass Explosion Radiating)
(documentation Explosion "Any sudden and massive release of energy that is
the product of a chemical reaction.")

(=>
   (instance ?EXPLOSION Explosion)
   (exists (?PROC)
      (and
         (instance ?PROC ChemicalProcess)
         (causes ?PROC ?EXPLOSION))))

(=>
   (instance ?EXPLOSION Explosion)
   (capability Damaging instrument ?EXPLOSION))

(subclass Performance Demonstrating)
(documentation Performance "A &%Demonstrating which includes &%DramaticActing
and/or &%Music and which is intended to entertain the audience.")

(=>
   (instance ?PERFORMANCE Performance)
   (exists (?SUB)
      (and
         (subProcess ?SUB ?PERFORMANCE)
         (or
            (instance ?SUB DramaticActing)
            (instance ?SUB Music)))))

(=>
   (instance ?PERFORMANCE Performance)
   (exists (?STAGE)
      (and
         (instance ?STAGE PerformanceStage)
         (located ?PERFORMANCE ?STAGE))))

(subclass Lecture Demonstrating)
(subclass Lecture Speaking)
(documentation Lecture "Any instance of &%Speaking which is done before an
assembled audience.")

(subclass Sermon Lecture)
(documentation Sermon "A &%Lecture that is part of a &%ReligiousService.")

(=>
   (instance ?SERMON Sermon)
   (exists (?SERVICE)
      (and
         (instance ?SERVICE ReligiousService)
         (subProcess ?SERMON ?SERVICE))))

(subclass DramaticActing Pretending)
(documentation DramaticActing "Playing a character in a &%Performance,
&%MotionPicture, etc.")

(subclass DramaticCast GroupOfPeople)
(documentation DramaticCast "The &%GroupOfPeople who engage in &%DramaticActing
as part of the realization of a single &%FictionalText.")

(=>
   (instance ?CAST DramaticCast)
   (exists (?TEXT ?PROP ?PROC)
      (and
         (instance ?TEXT FictionalText)
         (containsInformation ?TEXT ?PROP)
         (realization ?PROC ?PROP)
         (forall (?MEMBER)
            (=>
               (member ?MEMBER ?CAST)
               (exists (?SUB)
                  (and
                     (instance ?SUB DramaticActing)
                     (agent ?SUB ?MEMBER)
                     (subProcess ?SUB ?PROC))))))))

(subclass SocialParty Meeting)
(subclass SocialParty RecreationOrExercise)
(documentation SocialParty "Any &%Meeting where the intent is primarily
to socialize and be entertained.")

(subclass FormalMeeting Meeting)
(disjoint FormalMeeting SocialParty)
(documentation FormalMeeting "Any &%Meeting which is the result of &%Planning
and whose purpose is not socializing.")

(=>
   (instance ?MEETING FormalMeeting)
   (exists (?PLANNING)
      (and
         (instance ?PLANNING Planning)
         (result ?PLANNING ?MEETING)
         (earlier (WhenFn ?PLANNING) (WhenFn ?MEETING)))))

(subclass Resolution Deciding)
(documentation Resolution "Any instance of &%Deciding which is conducted at a
&%FormalMeeting and where the &%agent is an &%Organization.")

(=>
   (instance ?RESOLUTION Resolution)
   (exists (?AGENT ?MEETING)
      (and
         (instance ?AGENT Organization)
         (agent ?RESOLUTION ?AGENT)
         (subProcess ?RESOLUTION ?MEETING)
         (instance ?MEETING FormalMeeting))))

(subclass Smoking RecreationOrExercise)
(documentation Smoking "Inhaling and exhaling &%Smoke produced by a
&%CigarOrCigarette.")

(=>
   (instance ?SMOKING Smoking)
   (exists (?BURN ?CIGAR ?BREATHE)
      (and
         (subProcess ?BURN ?SMOKING)
         (instance ?BURN Combustion)
         (resource ?BURN ?CIGAR)
         (instance ?CIGAR CigarOrCigarette)
         (result ?BURN ?SMOKE)
         (patient ?BREATHE ?SMOKE)
         (instance ?BREATHE Breathing)
         (subProcess ?BREATHE ?SMOKING))))

(instance Jury GroupOfPeople)
(documentation Jury "A &%GroupOfPeople who are given the duty of rendering a
verdict with respect to a &%LegalAction.")

(=>
   (instance ?JURY Jury)
   (holdsRight (exists (?DECISION)
                  (and
                     (instance ?DECISION LegalDecision)
                     (agent ?DECISION ?JURY))) ?JURY))

(subclass LegalCharge LegalAction)
(documentation LegalCharge "Any &%LegalAction of which a &%Government is
the &%agent.")

(=>
   (instance ?CHARGE LegalCharge)
   (exists (?GOV)
      (and
         (instance ?GOV Government)
         (agent ?CHARGE ?GOV))))

(subclass Testifying Stating)
(documentation Testifying "Giving testimony as part of a &%JudicialProcess.")

(=>
   (instance ?TESTIFY Testifying)
   (exists (?PROC)
      (and
         (instance ?PROC JudicialProcess)
         (subProcess ?TESTIFY ?PROC))))

(subclass CourtRoom Room)
(documentation CourtRoom "Any &%Room whose purpose is to realize
&%JudicialProcesses.")

(=>
   (instance ?PROCESS JudicialProcess)
   (exists (?ROOM)
      (and
         (instance ?ROOM CourtRoom)
         (located ?PROCESS ?ROOM))))

(subclass LegalOpinion Argument)
(documentation LegalOpinion "An &%Argument that explains the reasoning behind a
&%LegalDecision.")

(=>
   (instance ?OPINION LegalOpinion)
   (exists (?DECISION ?TEXT ?PROPOSITION)
      (and
         (instance ?DECISION LegalDecision)
         (result ?DECISION ?TEXT)
         (containsInformation ?TEXT ?PROPOSITION)
         (conclusion ?PROPOSITION ?OPINION))))

(subclass LegalAward LegalDecision)
(documentation LegalAward "Any &%LegalDecision which gives to the plaintiff of
the corresponding &%LegalAction some amount of monetary compensation.")

(=>
   (and
      (instance ?AWARD LegalAward)
      (refers ?AWARD ?ACTION)
      (instance ?ACTION LegalAction)
      (agent ?ACTION ?PLAINTIFF))
   (confersRight (exists (?GET ?OBJ ?VALUE)
                    (and
                       (instance ?GET Getting)
                       (experiencer ?GET ?PLAINTIFF)
                       (patient ?GET ?OBJ)
                       (monetaryValue ?OBJ ?VALUE))) ?AWARD ?PLAINTIFF))

(subclass LegalConviction LegalDecision)
(documentation LegalConviction "Any &%LegalDecision where the defendant is found
guilty of the crime for which the corresponding trial was held.")

(subclass LegalAquittal LegalDecision)
(documentation LegalAquittal "Any &%LegalDecision where the defendant is found
not to be guilty of the crime for which the corresponding trial was held.")

(subclass GameCall Deciding)
(subclass GameCall Declaring)
(documentation GameCall "A decision issued by an official referee in a
&%Game.  Note that &%GameCall is a subclass of &%Declaring, because these
decisions have binding, normative force.")

(=>
   (instance ?CALL GameCall)
   (exists (?GAME)
      (and
         (instance ?GAME Game)
         (refers ?CALL ?GAME))))

(subclass BeginningOperations OrganizationalProcess)
(disjoint BeginningOperations CeasingOperations)
(documentation BeginningOperations "The process of an &%Organization
commencing operations.  In the case of a &%Corporation, this would be
the process of going into business.")

(=>
   (and
      (instance ?OP BeginningOperations)
      (instance ?ORG Organization)
      (agent ?OP ?ORG))
   (starts ?OP (WhenFn ?ORG)))

(subclass CeasingOperations OrganizationalProcess)
(documentation CeasingOperations "The process of an &%Organization
ceasing operations, i.e. its folding or going out of business in
some other fashion.")

(=>
   (and
      (instance ?OP CeasingOperations)
      (instance ?ORG Organization)
      (agent ?OP ?ORG))
   (finishes ?OP (WhenFn ?ORG)))

(subclass FallingAsleep PsychologicalProcess)
(disjoint FallingAsleep WakingUp)
(documentation FallingAsleep "The process of transitioning from a state of
being &%Awake to a state of being &%Asleep.")

(=>
   (and
      (instance ?FALL FallingAsleep)
      (experiencer ?FALL ?AGENT))
   (exists (?START ?FINISH)
      (and
         (starts ?START (WhenFn ?FALL))
         (finishes ?FINISH (WhenFn ?FALL))
         (holdsDuring ?START (attribute ?AGENT Awake))
         (holdsDuring ?FINISH (attribute ?AGENT Asleep)))))

(subclass WakingUp PsychologicalProcess)
(documentation WakingUp "The process of transitioning from a state of being
&%Asleep to a state of being &%Awake.")

(=>
   (and
      (instance ?WAKE WakingUp)
      (experiencer ?WAKE ?AGENT))
   (exists (?START ?FINISH)
      (and
         (starts ?START (WhenFn ?WAKE))
         (finishes ?FINISH (WhenFn ?WAKE))
         (holdsDuring ?START (attribute ?AGENT Asleep))
         (holdsDuring ?FINISH (attribute ?AGENT Awake)))))

(subclass AcademicDegree Certificate)
(documentation AcademicDegree "A &%Certificate that demonstrates that the holder
of the &%Certificate has successfully completed an &%EducationalProgram.")

(=>
   (and
      (instance ?DEGREE AcademicDegree)
      (possesses ?AGENT ?DEGREE))
   (exists (?PROGRAM ?STUDY)
      (and
         (instance ?PROGRAM EducationalProgram)
         (realization ?STUDY ?PROGRAM)
         (experiencer ?STUDY ?AGENT))))

(subclass EducationalProgram Plan)
(documentation EducationalProgram "A series of &%EducationalCourses that must
be completed to receive an &%AcademicDegree or other &%Certificate.  Note that
an &%EducationalProgram, unlike an &%EducationalCourse, may be realized at more
than one &%EducationalOrganization.")

(=>
   (instance ?PROGRAM EducationalProgram)
   (exists (?COURSE1 ?COURSE2)
      (and
         (instance ?COURSE1 EducationalCourse)
         (instance ?COURSE2 EducationalCourse)
         (not (equal ?COURSE1 ?COURSE2))
         (subPlan ?COURSE1 ?PROGRAM)
         (subPlan ?COURSE2 ?PROGRAM))))

(subclass EducationalCourse EducationalProgram)
(documentation EducationalCourse "A schedule of class meetings offered by an
&%EducationalOrganization.")

(=>
   (instance ?COURSE EducationalCourse)
   (exists (?CLASS)
      (and
         (realization ?CLASS ?COURSE)
         (instance ?CLASS EducationalProcess)
         (located ?CLASS ?ORG)
         (instance ?ORG EducationalOrganization))))

(subclass School EducationalOrganization)
(documentation School "An &%EducationalOrganization with a curriculum,
teachers, and students.  Most &%Schools are housed in a &%Building
dedicated to the &%EducationalOrganization.")

(subclass HighSchool School)
(documentation HighSchool "A &%School which admits &%students who have
graduated from a middle school and which normally covers the ninth through
twelfth grades.  A &%HighSchool confers a high school diploma.")

(=>
   (and
      (instance ?ENTER Matriculation)
      (agent ?ENTER ?COLLEGE)
      (patient ?ENTER ?STUDENT)
      (instance ?COLLEGE College))
   (exists (?GRAD ?SCHOOL)
      (and
         (instance ?GRAD Graduation)
         (agent ?GRAD ?SCHOOL)
         (patient ?GRAD ?STUDENT)
         (instance ?SCHOOL HighSchool)
         (earlier (WhenFn ?GRAD) (WhenFn ?ENTER)))))

(subclass PostSecondarySchool School)
(partition PostSecondarySchool JuniorCollege College University)
(documentation PostSecondarySchool "The class of &%Schools that offer
an associate's degree or a bachelor's degree.")

(subclass JuniorCollege PostSecondarySchool)
(documentation JuniorCollege "The class of &%PostSecondarySchools that
offer an associate's degree and do not offer a bachelor's degree.")

(subclass College PostSecondarySchool)
(documentation College "A &%School which admits &%students who have
graduated from high school and which confers a bachelor's degree,
normally requiring four years of study.  Note that a &%College does
not confer any graduate degrees.  For institutions that confer both
bachelor's and graduate degrees, the concept &%University should be
used.")

(subclass University PostSecondarySchool)
(documentation University "A &%School which admits &%students that
have graduated from high school (known as undergraduate students) and
&%students who have received a bachelor's degree (known as graduate
students).  A &%University confers both bachelor's and graduate
degrees.")

(subrelation student member)
(domain student 1 EducationalOrganization)
(domain student 2 CognitiveAgent)
(documentation student "(&%student ?AGENT ?ORG) means that ?AGENT is enrolled
in the &%EducationalOrganization ?ORG.")

(=>
   (student ?ORG ?AGENT)
   (exists (?PROCESS)
      (and
         (instance ?PROCESS EducationalProcess)
	   (located ?PROCESS ?ORG)
         (destination ?PROCESS ?AGENT))))

(subrelation teacher member)
(domain teacher 1 EducationalOrganization)
(domain teacher 2 CognitiveAgent)
(documentation teacher "(&%teacher ?AGENT ?ORG) means that ?AGENT is a
teacher at the &%EducationalOrganization ?ORG.")

(=>
   (teacher ?ORG ?AGENT)
   (exists (?PROCESS)
      (and
         (instance ?PROCESS EducationalProcess)
	   (located ?PROCESS ?ORG)
         (agent ?PROCESS ?AGENT))))

(subclass InsurancePolicy Certificate)
(documentation InsurancePolicy "A &%Certificate that states the terms of an
insurance contract.")

(subclass Telephoning Speaking)
(documentation Telephoning "Any instance of &%Speaking where the
&%instrument of &%Communication is a &%Telephone.")

(=>
   (instance ?TEL Telephoning)
   (exists (?DEVICE)
      (and
         (instance ?DEVICE Telephone)
         (instrument ?TEL ?DEVICE))))

(subclass EconomicRelation BinaryRelation)
(documentation EconomicRelation "A class of &%Relations which are used
to specify various economic measures, e.g. the GDP, the consumer price
index, and the trade deficit.")

(=>
   (and
      (instance ?REL EconomicRelation)
      (domain ?REL 1 ?CLASS))
   (subclass ?CLASS GeopoliticalArea))

(subclass LaborStriking OrganizationalProcess)
(documentation LaborStriking "A &%Process in which some or all of the
employees of an &%Organization refuse to work until their pay is
increased or their working conditions are improved in some respect.")

(=>
   (and
      (instance ?STRIKE LaborStriking)
      (agent ?STRIKE ?PERSON)
      (instance ?PERSON Human)
      (patient ?STRIKE ?ORG)
      (instance ?ORG Organization))
   (employs ?ORG ?PERSON))

(subclass Retiring TerminatingEmployment)
(documentation Retiring "Voluntarily leaving employment at the end of one's
career in order to take time off in the later years of one's life.")

(instance monetaryWage QuaternaryPredicate)
(domain monetaryWage 1 Organization)
(domain monetaryWage 2 Human)
(domain monetaryWage 3 TimeDuration)
(domain monetaryWage 4 CurrencyMeasure)
(documentation monetaryWage "(&%monetaryWage ?ORG ?PERSON ?TIME ?MONEY) means
that the &%Organization employs ?PERSON and pays him/her the amount of money
?MONEY per &%TimeDuration ?TIME.")

(=>
   (monetaryWage ?ORG ?PERSON ?TIME ?MONEY)
   (employs ?ORG ?PERSON))

(subclass GameArtifact Artifact)
(disjointDecomposition GameArtifact GameBoard GamePiece)
(documentation GameArtifact "An &%Artifact that is designed to be used as an
&%instrument in a &%Game.")

(=>
   (instance ?ARTIFACT GameArtifact)
   (exists (?GAME)
      (and
         (subclass ?GAME Game)
         (capability ?GAME instrument ?ARTIFACT))))

(subclass GameBoard GameArtifact)
(documentation GameBoard "A &%GameArtifact which is intended to be used as the
game area for playing a particular game.")

(=>
   (instance ?BOARD GameBoard)
   (hasPurpose ?BOARD (exists (?GAME)
                         (and
                            (instance ?GAME Game)
                            (located ?GAME ?BOARD)))))

(subclass GamePiece GameArtifact)
(documentation GamePiece "A &%GameArtifact that is moved around in a game
area.")

(subclass Ball GamePiece)
(documentation Ball "Any &%GamePiece which has the shape of a sphere.")

(subclass GameShot Impelling)
(subclass GameShot Maneuver)
(documentation GameShot "Impelling a &%GamePiece for the purpose of
scoring a point or preventing the opposing player or team from scoring
a point.  Note that this class does not cover shots which are disallowed
by the rules of the game.")

(=>
   (instance ?SHOT GameShot)
   (exists (?PIECE)
      (and
         (instance ?PIECE GamePiece)
         (patient ?SHOT ?PIECE))))

(=>
   (instance ?SHOT GameShot)
   (exists (?GAME)
      (and
         (instance ?GAME Game)
         (subProcess ?SHOT ?GAME))))

(=>
   (instance ?SHOT GameShot)
   (hasPurpose ?SHOT (instance ?SHOT Score)))

(subclass Score GameShot)
(documentation Score "A successful attempt to score a point in a &%Game.")

(subclass GameGoal GameArtifact)
(documentation GameGoal "The location where a &%GameShot must end up if it
is to constitute a &%Score.")

(=>
   (and
      (instance ?GOAL GameGoal)
      (instrument ?GAME ?GOAL)
      (instance ?GAME Game)
      (subProcess ?SCORE ?GAME)
      (instance ?SCORE Score))
   (exists (?PIECE ?TIME)
      (and
         (instance ?PIECE GamePiece)
         (patient ?SCORE ?PIECE)
         (temporalPart ?TIME (WhenFn ?SCORE))
         (holdsDuring ?TIME (located ?PIECE ?GOAL)))))

(subclass BaseballManeuver Maneuver)
(documentation BaseballManeuver "Any &%Maneuver in &%Baseball.")

(=>
   (instance ?MOVE BaseballManeuver)
   (exists (?BASEBALL)
      (and
         (instance ?BASEBALL Baseball)
         (subProcess ?MOVE ?BASEBALL))))

(subclass BaseballWalk BaseballManeuver)
(documentation BaseballWalk "Taking first base after four balls have been
called by the umpire.")

(subclass BaseballHit GameShot)
(subclass BaseballHit BaseballManeuver)
(documentation BaseballHit "Any base hit in &%Baseball.")

(subclass BaseballRun BaseballHit)
(subclass BaseballRun Score)
(documentation BaseballRun "A &%Score in &%Baseball.  It consists of hitting
the ball with the bat and then touching all four bases of the diamond before
being tagged with the ball by a member of the opposite team.")

(subclass HomeRun BaseballRun)
(documentation HomeRun "A &%BaseballRun where the batter touches home base
during his turn at bat.")

(subclass Throwing Impelling)
(subclass Throwing BodyMotion)
(documentation Throwing "Any instance of &%Impelling where the &%instrument is
an &%Arm.")

(=>
   (instance ?THROW Throwing)
   (exists (?ARM)
      (and
         (instance ?ARM Arm)
         (instrument ?THROW ?ARM))))

(subclass Pitching Throwing)
(subclass Pitching GameShot)
(documentation Pitching "&%Throwing a &%Ball to the batter in a game of
&%Baseball or softball.")

(=>
   (and
      (instance ?PITCH Pitching)
      (patient ?PITCH ?BALL))
   (instance ?BALL Ball))

(subclass Catching Touching)
(subclass Catching Maneuver)
(documentation Catching "Any &%Maneuver in a &%Game which results in a
situation where the &%agent &%grasps the &%Ball.")

(=>
   (and
      (instance ?CATCH Catching)
      (patient ?CATCH ?BALL))
   (instance ?CATCH Ball))

(=>
   (and
      (instance ?CATCH Catching)
      (agent ?CATCH ?AGENT)
      (patient ?CATCH ?BALL))
   (holdsDuring (EndFn (WhenFn ?CATCH)) (grasps ?AGENT ?BALL)))

(subclass Stretching Motion)
(documentation Stretching "Moving two sides of an object in opposite
directions so that the object becomes both longer and thinner.")

(subclass Accelerating Translocation)
(subclass Accelerating Increasing)
(documentation Accelerating "Increasing the speed with which someone
or something is moving.")

(=>
   (and
      (instance ?ACCELERATE Accelerating)
      (agent ?ACCELERATE ?AGENT))
   (exists (?LENGTH1 ?LENGTH2 ?TIME1 ?TIME2)
      (and
         (holdsDuring (BeginFn (WhenFn ?ACCELERATE)) (measure ?AGENT (SpeedFn ?LENGTH1 ?TIME1)))
         (holdsDuring (EndFn (WhenFn ?ACCELERATE)) (measure ?AGENT (SpeedFn ?LENGTH2 ?TIME2)))
         (or
            (greaterThan ?LENGTH2 ?LENGTH1)
            (greaterThan ?TIME2 ?TIME1)))))

(subclass Flying Translocation)
(documentation Flying "Any instance of &%Translocation which is through an
&%AtmosphericRegion and which is powered by the wings of an &%Animal.")

(=>
   (instance ?FLY Flying)
   (exists (?REGION)
      (and
         (instance ?REGION AtmosphericRegion)
         (located ?FLY ?REGION))))

(subclass TakingOff Translocation)
(documentation TakingOff "Any instance of &%Translocation which starts on something other
than an &%AtmosphericRegion and which has an instance of &%Flying as a &%subProcess.")

(=>
   (instance ?OFF TakingOff)
   (exists (?REGION ?FLYING)
      (and
         (not (instance ?REGION AtmosphericRegion))
         (holdsDuring (BeginFn (WhenFn ?OFF)) (located ?OFF ?REGION))
         (subProcess ?FLYING ?OFF)
         (instance ?FLYING Flying))))

(subclass Landing Translocation)
(documentation Landing "Any instance of &%Translocation which ends up on something other
than an &%AtmosphericRegion and which has an instance of &%Flying as a &%subProcess.")

(=>
   (instance ?LAND Landing)
   (exists (?REGION ?FLYING)
      (and
         (not (instance ?REGION AtmosphericRegion))
         (holdsDuring (EndFn (WhenFn ?LAND)) (located ?LAND ?REGION))
         (subProcess ?FLYING ?OFF)
         (instance ?FLYING Flying))))

(subclass Returning Translocation)
(documentation Returning "Any instance of &%Translocation where the &%agent
goes to a location where he/she had been before the &%Translocation took place.")

(=>
   (and
      (instance ?RETURN Returning)
      (experiencer ?RETURN ?AGENT)
      (destination ?RETURN ?DEST))
   (exists (?TIME)
      (and
         (earlier ?TIME (WhenFn ?RETURN))
         (holdsDuring ?TIME (located ?AGENT ?DEST)))))

(subclass Escaping Translocation)
(documentation Escaping "Any instance of &%Translocation where the &%agent brings
it about that he/she is no longer confined without having the right to do
so.")

(=>
   (and
      (instance ?ESCAPE Escaping)
      (agent ?ESCAPE ?AGENT))
   (exists (?CONFINE)
      (and
         (instance ?CONFINE Confining)
         (patient ?CONFINE ?AGENT)
         (meetsTemporally (WhenFn ?CONFINE) (WhenFn ?ESCAPE)))))

(=>
   (instance ?ESCAPE Escaping)
   (not (holdsRight (agent ?ESCAPE ?AGENT) ?AGENT)))

(subclass Leaving Motion)
(documentation Leaving "The initial part of any instance of &%Translocation.")

(=>
   (instance ?LEAVE Leaving)
   (exists (?GO)
      (and
         (instance ?GO Translocation)
         (subProcess ?LEAVE ?GO)
         (starts (WhenFn ?LEAVE) (WhenFn ?GO)))))

(subclass Arriving Motion)
(documentation Arriving "The final part of any instance of &%Translocation.")

(=>
   (instance ?ARRIVE Arriving)
   (exists (?GO)
      (and
         (instance ?GO Translocation)
         (subProcess ?ARRIVE ?GO)
         (finishes (WhenFn ?ARRIVE) (WhenFn ?GO)))))

(subclass Rotating Motion)
(documentation Rotating "&%Motion that begins and ends at the same point,
because the trajectory of the &%Motion is circular.")

(=>
   (and
      (instance ?ROTATE Rotating)
      (experiencer ?ROTATE ?AGENT))
   (exists (?LOC)
      (and
         (holdsDuring (BeginFn (WhenFn ?ROTATE)) (located ?AGENT ?LOC))
         (holdsDuring (EndFn (WhenFn ?ROTATE)) (located ?AGENT ?LOC)))))

(subclass MotionUpward Motion)
(disjoint MotionUpward MotionDownward)
(documentation MotionUpward "&%Motion where an &%Object is moving away
from the ground.")

(subclass MotionDownward Motion)
(documentation MotionDownward "&%Motion where an &%Object is moving toward the
ground.")

(subclass Reversing Motion)
(documentation Reversing "Moving something in such a way that its &%top
becomes its &%bottom and vice versa.")

(=>
   (and
      (instance ?REVERSE Reversing)
      (patient ?REVERSE ?OBJ)
      (holdsDuring (BeginFn (WhenFn ?REVERSE)) (and (top ?TOP ?OBJ) (bottom ?BOTTOM ?OBJ))))
   (holdsDuring (EndFn (WhenFn ?REVERSE)) (and (top ?BOTTOM ?OBJ) (bottom ?TOP ?OBJ))))

(subclass LiquidMotion Motion)
(documentation LiquidMotion "Any &%Motion where the &%patient is a
&%Liquid.  This class would cover, in particular, the flow of
&%Water.")

(=>
   (and
      (instance ?MOTION LiquidMotion)
      (patient ?MOTION ?OBJ))
   (attribute ?OBJ Liquid))

(subclass Dripping LiquidMotion)
(documentation Dripping "Any &%LiquidMotion where the &%Liquid is moved
drop by drop.")

(subclass Pouring LiquidMotion)
(subclass Pouring Transfer)
(documentation Pouring "Any instance of &%Transfer from one &%Container to
another, where the thing transferred is a &%Liquid.")

(=>
   (instance ?POUR Pouring)
   (exists (?LIQUID ?CONTAINER1 ?CONTAINER2)
      (and
         (origin ?POUR ?CONTAINER1)
         (destination ?POUR ?CONTAINER2)
         (instance ?CONTAINER1 Container)
         (instance ?CONTAINER2 Container))))

(subclass WaterMotion LiquidMotion)
(documentation WaterMotion "Any &%LiquidMotion where the &%Liquid is &%Water.")

(=>
   (instance ?MOTION WaterMotion)
   (exists (?WATER)
      (and
         (patient ?MOTION ?WATER)
         (instance ?WATER Water))))

(subclass WaterWave LiquidMotion)
(documentation WaterWave "A &%WaterWave is a raised ridge of water
moving along the surface of a body of water.  The &%WaterWave moves
in a direction approximately transverse to the crest line of the wave.
The &%patient of the &%WaterWave is successive regions of water, which
do not travel in the direction of the wave or with it.")

(=>
   (instance ?WAVE WaterWave)
   (exists (?AREA)
      (and
         (instance ?AREA WaterArea)
         (located ?WAVE ?AREA))))

(subclass GasMotion Motion)
(documentation GasMotion "Any &%Motion where the &%patient is a
&%Gas.  This class would cover, in particular, the motion of
&%Air, e.g. a breeze or wind.")

(=>
   (and
      (instance ?MOTION GasMotion)
      (patient ?MOTION ?OBJ))
   (attribute ?OBJ Gas))

(subclass Wind AirStream)
(subclass Wind GasMotion)
(documentation Wind "&%Wind is the class of variable &%AirStreams
that occur in &%EarthsAtmosphere.")

(=>
	(instance ?BLOW Wind)
	(located ?BLOW EarthsAtmosphere))

(=>
   (instance ?WIND Wind)
   (exists (?AIR)
      (and
         (patient ?WIND ?AIR)
         (instance ?AIR Air))))

(subclass Pulling Transportation)
(documentation Pulling "Any instance of &%Transportation, where a
&%TransportationDevice is dragged by something else, whether the something
else is an &%Animal or a self-powered &%TransportationDevice.")

(=>
   (and
      (instance ?PULL Pulling)
      (patient ?PULL ?DEVICE))
   (instance ?DEVICE TransportationDevice))

(subclass AirTransportation Transportation)
(documentation AirTransportation "Any instance of &%Transportation where the &%instrument is an &%Aircraft and which is through an &%AtmosphericRegion.")

(=>
   (instance ?TRANSPORT AirTransportation)
   (exists (?CRAFT ?REGION)
      (and
         (instance ?CRAFT Aircraft)
         (instance ?REGION AtmosphericRegion)
         (instrument ?TRANSPORT ?CRAFT)
         (located ?TRANSPORT ?REGION))))

(=>
   (instance ?CRAFT Aircraft)
   (capability AirTransportation instrument ?CRAFT))

(subclass Helicopter Aircraft)
(documentation Helicopter "Any &%Aircraft with rapidly rotating wings.")

(subclass LandTransportation Transportation)
(documentation LandTransportation "Any instance of &%Transportation where the
&%instrument is a &%LandVehicle.")

(=>
   (instance ?LAND LandTransportation)
   (exists (?CRAFT ?AREA)
      (and
         (instance ?CRAFT LandCraft)
         (instance ?AREA LandArea)
         (instrument ?LAND ?CRAFT)
         (located ?CRAFT ?AREA))))

(=>
   (instance ?VEHICLE LandVehicle)
   (capability LandTransportation instrument ?VEHICLE))

(subclass StageCoach Wagon)
(documentation StageCoach "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.")

(=>
   (and
      (instance ?STAGE StageCoach)
      (instance ?PULL Pulling)
      (patient ?PULL ?STAGE)
      (agent ?PULL ?HORSE))
   (instance ?HORSE Horse))

(subclass WaterTransportation Transportation)
(documentation WaterTransportation "Any instance of &%Transportation where
the &%instrument is a &%Watercraft.")

(=>
   (instance ?TRANSPORT WaterTransportation)
   (exists (?CRAFT ?AREA)
      (and
         (instance ?CRAFT Watercraft)
         (instance ?AREA WaterArea)
         (instrument ?TRANSPORT ?CRAFT)
         (located ?TRANSPORT ?AREA))))

(=>
   (instance ?CRAFT Watercraft)
   (capability WaterTransportation instrument ?CRAFT))

(subclass SpaceTransportation Transportation)
(documentation SpaceTransportation "Any instance of &%Transportation where the
&%instrument is a &%Spacecraft and which is through a &%SpaceRegion.")

(=>
   (instance ?TRANSPORT SpaceTransportation)
   (exists (?CRAFT ?REGION)
      (and
         (instance ?CRAFT Spacecraft)
         (instance ?REGION SpaceRegion)
         (instrument ?TRANSPORT ?CRAFT)
         (located ?TRANSPORT ?REGION))))

(subclass Spacecraft Vehicle)
(documentation Spacecraft "Any &%Vehicle which is capable of
&%SpaceTransportation.")

(=>
   (instance ?CRAFT Spacecraft)
   (capability SpaceTransportation instrument ?CRAFT))

(subclass Missile Spacecraft)
(documentation Missile "A &%Spacecraft which is propelled by a rocket.")

(subclass Installing Putting)
(documentation Installing "&%Putting a &%Device in a location and configuring
the &%Device so that it can be used as intended after the installation.")

(=>
   (and
      (instance ?INSTALL Installing)
      (patient ?INSTALL ?DEVICE))
   (instance ?DEVICE Device))

(=>
   (and
      (instance ?INSTALL Installing)
      (patient ?INSTALL ?DEVICE)
      (hasPurpose ?DEVICE ?PURPOSE))
   (holdsDuring (EndFn (WhenFn ?INSTALL)) (true ?PURPOSE True)))

(subclass MovingResidence Transfer)
(documentation MovingResidence "The process of changing one's residence, i.e. moving one's belongs to a new &%home.")

(=>
   (and
      (instance ?MOVE MovingResidence)
      (agent ?MOVE ?AGENT))
   (exists (?HOME1 ?HOME2)
      (and
         (holdsDuring (BeginFn (WhenFn ?MOVE)) (home ?AGENT ?HOME1))
         (holdsDuring (EndFn (WhenFn ?MOVE)) (home ?AGENT ?HOME2))
         (not (equal ?HOME1 ?HOME2)))))

(subclass Tilling IntentionalProcess)
(subclass Tilling SurfaceChange)
(documentation Tilling "Any &%Process of altering &%Soil in such a way as to
facilitate &%Agriculture.")

(=>
   (and
      (instance ?TILL Tilling)
      (patient ?TILL ?SOIL))
   (instance ?SOIL Soil))

(=>
   (instance ?TILL Tilling)
   (exists (?CULTURE)
      (and
         (instance ?CULTURE Agriculture)
         (subProcess ?TILL ?CULTURE))))

(subclass Drilling IntentionalProcess)
(subclass Drilling SurfaceChange)
(documentation Drilling "Any &%Process of producing a &%hole in a
&%SelfConnectedObject which involves rotating a long, thin bit.")

(=>
   (and
      (instance ?DRILL Drilling)
      (patient ?DRILL ?OBJ))
   (exists (?HOLE)
      (and
         (holdsDuring (BeginFn (WhenFn ?DRILL)) (not (hole ?HOLE ?OBJ)))
         (holdsDuring (EndFn (WhenFn ?DRILL)) (hole ?HOLE ?OBJ)))))

(subclass Imagining PsychologicalProcess)
(documentation Imagining "Forming a mental picture of something which
is not present.")

(subclass Dreaming Imagining)
(disjoint Dreaming IntentionalProcess)
(documentation Dreaming "A &%Process of producing metal images which occurs
while one is &%Asleep.")

(=>
   (and
      (instance ?DREAM Dreaming)
      (experiencer ?DREAM ?AGENT))
   (holdsDuring (WhenFn ?DREAM) (attribute ?AGENT Asleep)))

(subclass Frightening PsychologicalProcess)
(documentation Frightening "Any &%PsychologicalProcess where the &%patient
comes to feel &%Anxiety.")

(=>
   (and
      (instance ?FRIGHTEN Frightening)
      (experiencer ?FRIGHTEN ?AGENT))
   (and
      (holdsDuring (BeginFn (WhenFn ?FRIGHTEN)) (not (attribute ?AGENT Anxiety)))
      (holdsDuring (EndFn (WhenFn ?FRIGHTEN)) (attribute ?AGENT Anxiety))))

(subclass Murder Killing)
(subclass Murder CriminalAction)
(documentation Murder "Impermissible &%Killing of a &%Human.")

(=>
   (instance ?MURDER Murder)
   (exists (?PERSON)
      (and
         (patient ?MURDER ?PERSON)
         (instance ?PERSON Human))))

(subclass Hanging Killing)
(documentation Hanging "&%Killing someone by suspending him/her from a
rope wound around the neck until asphyxiation occurs.")

(subclass OrchestralConducting Guiding)
(documentation OrchestralConducting "The &%Process of directing an orchestra.")

(=>
   (instance ?CONDUCT OrchestralConducting)
   (exists (?MUSIC)
      (and
         (instance ?MUSIC Music)
         (result ?CONDUCT ?MUSIC))))

(=>
   (and
      (instance ?CONDUCT OrchestralConducting)
      (patient ?CONDUCT ?ORCHESTRA))
   (instance ?ORCHESTRA Orchestra))

(subclass Orchestra GroupOfPeople)
(documentation Orchestra "A &%GroupOfPeople that create &%InstrumentalMusic
together.")

(=>
   (instance ?ORCHESTRA Orchestra)
   (hasPurpose ?ORCHESTRA (exists (?MUSIC)
                             (and
                                (instance ?MUSIC InstrumentalMusic)
                                (agent ?MUSIC ?ORCHESTRA)))))

(subclass DramaticDirecting Guiding)
(documentation DramaticDirecting "The process of directing a &%DramaticActing
in a &%MotionPicture or the &%Performance of a &%DramaticPlay.")

(=>
   (and
      (instance ?DIRECT DramaticDirecting)
      (patient ?DIRECT ?ACT))
   (instance ?ACT DramaticActing))

(subclass Experimenting Investigating)
(documentation Experimenting "&%Investigating the truth of a &%Proposition
by constructing and observing a trial.  Note that the trial may be either
controlled or uncontrolled, blind or not blind.")

(subclass Sharing ChangeOfPossession)
(documentation Sharing "The subclass of &%ChangeOfPossession where a
&%properPart of the &%patient is given by the &%agent or the &%destination.")

(=>
   (and
      (instance ?SHARE Sharing)
      (agent ?SHARE ?AGENT1)
      (destination ?SHARE ?AGENT2)
      (patient ?SHARE ?OBJ))
   (exists (?GIVE ?PART)
      (and
         (instance ?GIVE Giving)
         (subProcess ?GIVE ?SHARE)
         (patient ?GIVE ?PART)
         (properPart ?PART ?OBJ)
         (agent ?GIVE ?AGENT1)
         (destination ?GIVE ?AGENT2))))

(subclass Stealing UnilateralGetting)
(subclass Stealing CriminalAction)
(documentation Stealing "Any &%UnilateralGetting which is not permitted by the
&%origin of the &%UnilateralGetting.  These cases of &%UnilateralGetting are
distinguished from ones where the &%destination is the subject of charity or
other forms of benefaction.")

(=>
   (and
      (instance ?STEAL Stealing)
      (destination ?STEAL ?AGENT)
      (origin ?STEAL ?VICTIM)
      (instance ?VICTIM CognitiveAgent))
   (not (confersRight (destination ?STEAL ?AGENT) ?VICTIM ?AGENT)))

(subclass Inheriting UnilateralGetting)
(documentation Inheriting "Any &%UnilateralGetting where the &%agent
receives some part of the property of a person upon the death of the
person.")

(=>
   (and
      (instance ?INHERIT Inheriting)
      (agent ?INHERIT ?HEIR)
      (origin ?INHERIT ?PERSON)
      (patient ?INHERIT ?PROPERTY))
   (exists (?DEATH)
      (and
         (instance ?DEATH Death)
         (experiencer ?DEATH ?PERSON)
         (earlier (WhenFn ?DEATH) (WhenFn ?INHERIT))
         (holdsDuring (ImmediatePastFn (WhenFn ?DEATH)) (possesses ?PERSON ?PROPERTY))
         (confersRight (possesses ?HEIR ?PROPERTY) ?PERSON ?HEIR))))

(subclass FullTimePosition Position)
(documentation FullTimePosition "Any &%Position where the employee is either
salaried or paid for at least 40 hour of work per week.")

(subclass PartTimePosition Position)
(documentation PartTimePosition "Any &%Position where the employee is not
salaried and is paid for less than 40 hours of work per week.")

(subclass ClericalSecretary Position)
(documentation ClericalSecretary "The class of &%Positions where the position
holder is responsible for clerical duties, e.g. typing documents, answering
phones, keeping schedules, etc.")

(subclass Soldier Position)
(documentation Soldier "The class of &%Positions which involve serving in
the armed forces of a &%Nation.")

(subclass RedcoatSoldier Soldier)
(documentation RedcoatSoldier "Any &%Soldier that served on the British side during
the American revolutionary war.")

(subclass ConfederateSoldier Soldier)
(documentation ConfederateSoldier "Any &%Soldier that served on the confederate side
during the American Civil War.")

(subclass MilitaryPrivate Soldier)
(documentation MilitaryPrivate "An enlisted &%Soldier of the lowest rank.")

(subclass MilitaryOfficer Soldier)
(documentation MilitaryOfficer "The class of &%Soldiers who have authority or command.")

(=>
   (instance ?OFFICER MilitaryOfficer)
   (exists (?MANAGE ?PATIENT)
      (and
         (instance ?MANAGE Managing)
         (agent ?MANAGE ?OFFICER)
         (patient ?MANAGE ?PATIENT)
         (or
            (instance ?PATIENT MilitaryOrganization)
            (instance ?PATIENT Soldier)))))

(subclass Lieutenant MilitaryOfficer)
(documentation Lieutenant "A commissioned &%MilitaryOfficer.")

(subclass CaptainOfficer MilitaryOfficer)
(documentation CaptainOfficer "A commissioned &%MilitaryOfficer who ranks
above a &%Lieutenant but below a &%MajorOfficer.")

(subclass Colonel MilitaryOfficer)
(documentation Colonel "A commissioned &%MilitaryOfficer who ranks above
a lieutenant colonel and below a brigadier general.")

(subclass Century TimeDuration)
(documentation Century "The &%TimeDuration of 100 years.")

(=>
   (instance ?CENTURY Century)
   (duration ?CENTURY (MeasureFn 100 YearDuration)))

(subclass Decade TimeDuration)
(documentation Decade "The &%TimeDuration of 10 years.")

(=>
   (instance ?DECADE Decade)
   (duration ?DECADE (MeasureFn 10 YearDuration)))

(subclass YardLength LengthMeasure)
(instance YardLength UnitOfMeasure)
(documentation YardLength "English unit of length, equal to 3 &%FeetLength.")

(=>
   (instance ?NUMBER RealNumber)
   (equal
        (MeasureFn ?NUMBER YardLength)
        (MeasureFn (MultiplicationFn 3 ?NUMBER) FootLength)))

(subclass NightTime TimeInterval)
(documentation NightTime "The class of &%TimeIntervals that begin at &%Sunset
and end at &%Sunrise.")

(=>
   (instance ?NIGHT NightTime)
   (exists (?DAY1 ?DAY2)
      (and
         (instance ?DAY1 DayTime)
         (instance ?DAY2 DayTime)
         (meetsTemporally ?NIGHT ?DAY1)
         (meetsTemporally ?DAY2 ?NIGHT))))

(=>
   (instance ?NIGHT NightTime)
   (exists (?RISE ?SET)
      (and
         (instance ?RISE Sunrise)
         (instance ?SET Sunset)
         (starts ?SET ?NIGHT)
         (finishes ?RISE ?NIGHT))))

(subclass DayTime TimeInterval)
(documentation DayTime "The class of &%TimeIntervals that begin at &%Sunrise
and end at &%Sunset.")

(=>
   (instance ?DAY DayTime)
   (exists (?NIGHT1 ?NIGHT2)
      (and
         (instance ?NIGHT1 NightTime)
         (instance ?NIGHT2 NightTime)
         (meetsTemporally ?DAY ?NIGHT1)
         (meetsTemporally ?NIGHT2 ?DAY))))

(=>
   (instance ?DAY DayTime)
   (exists (?RISE ?SET)
      (and
         (instance ?RISE Sunrise)
         (instance ?SET Sunset)
         (starts ?RISE ?DAY)
         (finishes ?SET ?DAY))))

(subclass Morning DayTime)
(documentation Morning "The class of &%TimeIntervals that begin at &%Sunrise
and end at noon.")

(=>
   (instance ?MORNING Morning)
   (exists (?HOUR)
      (and
         (instance ?HOUR (HourFn 12 ?DAY))
         (finishes ?HOUR ?MORNING))))

(subclass Afternoon DayTime)
(documentation Afternoon "The class of &%TimeIntervals that begin at noon and
end at &%Sunset.")

(=>
   (instance ?AFTERNOON Afternoon)
   (exists (?HOUR)
      (and
         (instance ?HOUR (HourFn 12 ?DAY))
         (starts ?HOUR ?AFTERNOON))))

(subclass Sunrise TimeInterval)
(documentation Sunrise "The &%TimeInterval of each &%Day when the sun is rising
and is partially overlapped by the horizon line.")

(subclass Sunset TimeInterval)
(documentation Sunset "The &%TimeInterval of each &%Day when the sun is setting
and is partially overlapped by the horizon line.")

(subclass Weekend TimeInterval)
(documentation Weekend "Any &%Saturday and &%Sunday which are contiguous.")

(=>
   (instance ?WEEKEND Weekend)
   (exists (?SATURDAY ?SUNDAY)
      (and
         (instance ?SATURDAY Saturday)
         (instance ?SUNDAY Sunday)
         (starts ?SATURDAY ?WEEKEND)
         (finishes ?SUNDAY ?WEEKEND)
         (meetsTemporally ?SATURDAY ?SUNDAY))))

(subclass SeasonOfYear TimeInterval)
(partition SeasonOfYear WinterSeason SpringSeason SummerSeason FallSeason)
(documentation SeasonOfYear "&%SeasonOfYear is the class of four seasons correlated with the calendar &%Year and associated with changes in the length of daylight and with overall temperature changes. Depending upon the &%GeographicArea, a &%SeasonOfYear may also be associated with weather patterns (e.g., rainy, dry, windy). The characteristics of seasons (cold vs. hot temperatures, long vs. short days) are reversed from the &%NorthernHemisphere to the &%SouthernHemisphere.")

(subclass WinterSeason SeasonOfYear)
(documentation WinterSeason "The &%SeasonOfYear that begins at the winter
solstice and ends at the spring equinox.")

(=>
   (instance ?WINTER WinterSeason)
   (exists (?SPRING)
      (and
         (instance ?SPRING SpringSeason)
         (meetsTemporally ?WINTER ?SPRING))))

(=>
   (instance ?WINTER WinterSeason)
   (exists (?AUTUMN)
      (and
         (instance ?AUTUMN FallSeason)
         (meetsTemporally ?AUTUMN ?WINTER))))

(subclass SpringSeason SeasonOfYear)
(documentation SpringSeason "The &%SeasonOfYear that begins at the spring
equinox and ends at the summer solstice.")

(=>
   (instance ?SPRING SpringSeason)
   (exists (?SUMMER)
      (and
         (instance ?SUMMER SummerSeason)
         (meetsTemporally ?SPRING ?SUMMER))))

(=>
   (instance ?Spring SpringSeason)
   (exists (?WINTER)
      (and
         (instance ?WINTER WinterSeason)
         (meetsTemporally ?WINTER ?SPRING))))

(subclass SummerSeason SeasonOfYear)
(documentation SummerSeason "The &%SeasonOfYear that begins at the summer
solstice and ends at the autumnal equinox.")

(=>
   (instance ?SUMMER SummerSeason)
   (exists (?SPRING)
      (and
         (instance ?SPRING SpringSeason)
         (meetsTemporally ?SPRING ?SUMMER))))

(=>
   (instance ?SUMMER SummerSeason)
   (exists (?AUTUMN)
      (and
         (instance ?AUTUMN FallSeason)
         (meetsTemporally ?SUMMER ?AUTUMN))))

(subclass FallSeason SeasonOfYear)
(documentation FallSeason "The &%SeasonOfYear that begins at the autumnal
equinox and ends at the winter solstice.")

(=>
   (instance ?AUTUMN FallSeason)
   (exists (?SUMMER)
      (and
         (instance ?SUMMER SummerSeason)
         (meetsTemporally ?SUMMER ?AUTUMN))))

(=>
   (instance ?AUTUMN FallSeason)
   (exists (?WINTER)
      (and
         (instance ?WINTER WinterSeason)
         (meetsTemporally ?AUTUMN ?WINTER))))

(instance Upstairs PositionalAttribute)
(documentation Upstairs "A &%PositionalAttribute to indicate that one thing is
one or more floors above a second thing in the same building.")

(=>
   (orientation ?OBJ1 ?OBJ2 Upstairs)
   (exists (?LEVEL1 ?LEVEL2 ?BUILDING)
      (and
         (instance ?LEVEL1 BuildingLevel)
         (instance ?LEVEL2 BuildingLevel)
         (instance ?BUILDING Building)
         (part ?LEVEL1 ?BUILDING)
         (part ?LEVEL2 ?BUILDING)
         (located ?OBJ1 ?LEVEL1)
         (located ?OBJ2 ?LEVEL2)
         (orientation ?LEVEL1 ?LEVEL2 Above))))

(instance Downstairs PositionalAttribute)
(documentation Downstairs "A &%PositionalAttribute to indicate that one thing is
one or more floors below a second thing in the same building.")

(=>
   (orientation ?OBJ1 ?OBJ2 Downstairs)
   (exists (?LEVEL1 ?LEVEL2 ?BUILDING)
      (and
         (instance ?LEVEL1 BuildingLevel)
         (instance ?LEVEL2 BuildingLevel)
         (instance ?BUILDING Building)
         (part ?LEVEL1 ?BUILDING)
         (part ?LEVEL2 ?BUILDING)
         (located ?OBJ1 ?LEVEL1)
         (located ?OBJ2 ?LEVEL2)
         (orientation ?LEVEL1 ?LEVEL2 Below))))

(instance Happiness EmotionalState)
(documentation Happiness "The state of being happy, experiencing pleasure,
joy or contentment.  Note that this &%Attribute covers both active enjoyment,
as well as the emotional state of simply being free from anxiety or fear.")

(=>
   (attribute ?PERSON Happiness)
   (not (exists (?PROP)
      (fears ?PERSON ?PROP))))

(instance Tranquility EmotionalState)
(subAttribute Tranquility Happiness)
(contraryAttribute Tranquility Anxiety)
(documentation Tranquility "The state of being free from &%Anxiety.")

(instance Unhappiness EmotionalState)
(contraryAttribute Unhappiness Happiness)
(documentation Unhappiness "The state of being unhappy, experiencing pain,
sorrow or unease.")

(instance Anxiety EmotionalState)
(subAttribute Anxiety Unhappiness)
(documentation Anxiety "The state of being worried, troubled or uneasy.")

(=>
   (attribute ?PERSON Anxiety)
   (exists (?PROP)
      (fears ?PERSON ?PROP)))

(subAttribute Anger Unhappiness)
(documentation Anger "The state of being wrathful, irate or indignant.")

(=>
   (attribute ?PERSON Anger)
   (exists (?PROP)
      (disapproves ?PERSON ?PROP)))

(subAttribute Pain Unhappiness)
(documentation Pain "A physical sensation of discomfort which can vary widely in intensity.")

(instance Surprise EmotionalState)
(documentation Surprise "The &%EmotionalState that one experiences when something unexpected and of significance occurs.")

(=>
   (holdsDuring ?TIME (attribute ?AGENT Surprise))
   (exists (?PART ?PROP)
      (and
         (temporalPart ?PART (PastFn ?TIME))
         (holdsDuring ?PART (expects ?AGENT ?PROP))
         (holdsDuring ?TIME (true ?PROP False)))))


(subclass SecondaryColor ColorAttribute)
(documentation SecondaryColor "A color that is the product of mixing together two or more &%PrimaryColors.")

(=>
   (and
      (instance ?COLOR SecondaryColor)
      (attribute ?OBJ ?COLOR))
   (exists (?PROCESS ?RESOURCE1 ?RESOURCE2)
      (and
         (result ?PROCESS ?OBJ)
         (resource ?PROCESS ?RESOURCE1)
         (resource ?PROCESS ?RESOURCE2)
         (attribute ?RESOURCE1 ?PRIMARY1)
         (attribute ?RESOURCE2 ?PRIMARY2)
         (instance ?PRIMARY1 PrimaryColor)
         (instance ?PRIMARY2 PrimaryColor)
         (not (equal ?PRIMARY1 ?PRIMARY2)))))

(instance Gray SecondaryColor)
(documentation Gray "A &%SecondaryColor that results from mixing &%Black and
&%White.")

(instance Pink SecondaryColor)
(documentation Pink "A &%SecondaryColor that results from mixing &%Red and
&%White.")

(instance Brown SecondaryColor)
(documentation Brown "A &%SecondaryColor that resembles the color of wood or
of soil.")

(instance Green SecondaryColor)
(documentation Green "A &%SecondaryColor that resembles the color of fresh
grass.")

(instance LineFormation ShapeAttribute)
(documentation LineFormation "A &%ShapeAttribute that applies to
&%Collections and indicates that all of the &%members of the &%Collection
are arrayed in a line, i.e. each &%member (except possibly the first) is
behind or to the side of exactly one other &%member.")

(=>
   (attribute ?COLLECTION LineFormation)
   (instance ?COLLECTION Collection))

(instance Stressed SoundAttribute)
(documentation Stressed "A &%SoundAttribute of &%Syllables.  It denotes
the quality of being emphasized over the other &%Syllables in the same
&%Word.")

(=>
   (attribute ?SYLLABLE Stressed)
   (instance ?SYLLABLE Syllable))

(=>
   (and
      (attribute ?SYLLABLE Stressed)
      (instance ?WORD Word)
      (part ?SYLLABLE ?WORD))
   (not (exists (?SYLLABLE2)
      (and
         (instance ?SYLLABLE2 Syllable)
         (part ?SYLLABLE2 ?WORD)
         (not (equal ?SYLLABLE2 ?SYLLABLE))))))

(subclass Syllable SymbolicString)
(documentation Syllable "A sequence of &%Characters from the same &%Word
that denote a single sound.")

(=>
   (instance ?WORD Word)
   (exists (?SYLLABLE)
      (and
         (instance ?SYLLABLE Syllable)
         (part ?SYLLABLE ?WORD))))

(subclass DigitCharacter Character)
(documentation DigitCharacter "Any &%Character that is comprised of a single digit,
i.e. one of the numerals 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.")

(instance Lost ContestAttribute)
(contraryAttribute Lost Won)
(documentation Lost "The &%ContestAttribute that applies to a &%Contest
participant who has lost the &%Contest.")

(instance Won ContestAttribute)
(documentation Won "The &%ContestAttribute that applies to a &%Contest
participant who has won the &%Contest.")

(subclass GameAttribute ContestAttribute)
(documentation GameAttribute "Any &%ContestAttribute that is specific
to a &%Game.")

(=>
   (and
      (property ?THING ?ATTR)
      (instance ?ATTR GameAttribute))
   (exists (?GAME)
      (and
         (instance ?GAME Game)
         (or
            (agent ?GAME ?THING)
            (patient ?GAME ?THING)
            (subProcess ?THING ?GAME)))))

(subclass SportAttribute GameAttribute)
(documentation SportAttribute "Any &%GameAttribute that is specific to
a &%Sport.")

(=>
   (and
      (property ?THING ?ATTR)
      (instance ?ATTR SportAttribute))
   (exists (?SPORT)
      (and
         (instance ?SPORT Game)
         (or
            (agent ?SPORT ?THING)
            (patient ?SPORT ?THING)
            (subProcess ?THING ?SPORT)))))

(instance BaseballStrike SportAttribute)
(documentation BaseballStrike "A baseball pitch that is in the strike zone
and that is not hit by the batter.")

(subclass PoliticoEconomicAttribute RelationalAttribute)
(partition PoliticoEconomicAttribute FormOfGovernment EconomicAttribute)
(documentation PoliticoEconomicAttribute "Any &%Attribute of a &%Government
which specifies some aspect of the political or economic system of the
&%Government.")

(=>
   (and
      (instance ?ATTRIBUTE PoliticoEconomicAttribute)
      (attribute ?GOVERNMENT ?ATTRIBUTE))
   (instance ?GOVERNMENT Government))

(subclass Oxidation ChemicalProcess)
(documentation Oxidation "Any &%ChemicalProcess where &%Electrons are removed
from the substance undergoing the &%ChemicalProcess.")

(=>
   (and
      (instance ?OXIDATE Oxidation)
      (patient ?OXIDATE ?SUBSTANCE)
      (holdsDuring (BeginFn (WhenFn ?OXIDATE)) (electronNumber ?SUBSTANCE ?GREATER)))
   (exists (?LOWER)
      (and
         (lessThan ?LOWER ?GREATER)
         (holdsDuring (EndFn (WhenFn ?OXIDATE)) (electronNumber ?SUBSTANCE ?LOWER)))))

(subclass Dialysis Separating)
(documentation Dialysis "Any process of &%Separating a &%Solution into two or more
constituent &%PureSubstances by means of their unequal diffusion through membranes
that are partially permeable.")

(=>
   (instance ?DIALYSIS Dialysis)
   (exists (?SOLUTION ?SUBSTANCE1 ?SUBSTANCE2)
      (and
         (resource ?DIALYSIS ?SOLUTION)
         (instance ?SOLUTION Solution)
         (result ?DIALYSIS ?SUBSTANCE1)
         (instance ?SUBSTANCE1 PureSubstance)
         (result ?DIALYSIS ?SUBSTANCE2)
         (instance ?SUBSTANCE2 PureSubstance)
         (not (equal ?SUBSTANCE1 ?SUBSTANCE2)))))

(instance ChemicalEquilibrium InternalAttribute)
(documentation ChemicalEquilibrium "The &%Attribute of being in a chemically
stable state, i.e. the relative proportions of &%resources and &%results will
not longer change.")

(=>
   (property ?PROCESS ChemicalEquilibrium)
   (instance ?PROCESS ChemicalProcess))

(=>
   (property ?PROCESS ChemicalEquilibrium)
   (exists (?RATIO)
      (=>
         (and
            (holdsDuring ?TIME (resource ?PROCESS ?RESOURCE))
            (holdsDuring ?TIME (result ?PROCESS ?RESULT)))
         (equal ?RATIO (DivisionFn ?RESOURCE ?RESULT)))))

(subclass GeometricFigure ShapeAttribute)
(partition GeometricFigure GeometricPoint OneDimensionalFigure TwoDimensionalFigure ThreeDimensionalFigure)
(documentation GeometricFigure "The class of all geometric figures, i.e. the
class of all abstract, spatial representations.  The instances of this class
are &%GeometricPoints, &%TwoDimensionalFigures or &%ThreeDimensionalFigures.")

(subclass GeometricPoint GeometricFigure)
(documentation GeometricPoint "The class of zero-dimensional
&%GeometricFigures, i.e. the class of &%GeometricFigures that have position
but lack extension in any dimension.")

(subclass OneDimensionalFigure GeometricFigure)
(documentation OneDimensionalFigure "The class of &%GeometricFigures that
have position and an extension along a single dimension, viz. straight lines.")

(subclass TwoDimensionalFigure GeometricFigure)
(partition TwoDimensionalFigure OpenTwoDimensionalFigure ClosedTwoDimensionalFigure)
(documentation TwoDimensionalFigure "The class of &%GeometricFigures that
have position and an extension along two dimensions, viz. plane figures
like circles and polygons.")

(subclass OpenTwoDimensionalFigure TwoDimensionalFigure)
(documentation OpenTwoDimensionalFigure "The class of &%TwoDimensionalFigures that
are not &%ClosedTwoDimensionalFigures.")

(instance geometricPart BinaryPredicate)
(instance geometricPart PartialOrderingRelation)
(domain geometricPart 1 GeometricFigure)
(domain geometricPart 2 GeometricFigure)
(documentation geometricPart "(&%geometricPart ?PART ?WHOLE) means that the
&%GeometricFigure ?PART is part of the &%GeometricFigure ?WHOLE.")

(instance parallel BinaryPredicate)
(domain parallel 1 OneDimensionalFigure)
(domain parallel 2 OneDimensionalFigure)
(documentation parallel "(&%parallel ?LINE1 ?LINE2) means that the
&%OneDimensionalFigures ?LINE1 and ?LINE2 are parallel to one another,
i.e. they are equidistant from one another at every point.")

(=>
   (parallel ?LINE1 ?LINE2)
   (not (exists (?POINT)
      (pointOfIntersection ?LINE1 ?LINE2 ?POINT))))

(instance angularMeasure BinaryPredicate)
(instance angularMeasure TotalValuedRelation)
(domain angularMeasure 1 TwoDimensionalAngle)
(domain angularMeasure 2 PlaneAngleMeasure)
(documentation angularMeasure "(&%angularMeasure ?ANGLE ?MEASURE) means that
the two-dimensional geometric angle ?ANGLE has the &%PlaneAngleMeasure of
?MEASURE.")

(instance lineMeasure BinaryPredicate)
(instance lineMeasure TotalValuedRelation)
(domain lineMeasure 1 OneDimensionalFigure)
(domain lineMeasure 2 LengthMeasure)
(documentation lineMeasure "(&%lineMeasure ?LINE ?MEASURE) means that the
straight line ?LINE has the &%LengthMeasure of ?MEASURE.")

(instance geometricDistance TernaryPredicate)
(instance geometricDistance SingleValuedRelation)
(instance geometricDistance TotalValuedRelation)
(domain geometricDistance 1 GeometricPoint)
(domain geometricDistance 2 GeometricPoint)
(domain geometricDistance 3 LengthMeasure)
(documentation geometricDistance "(&%geometricDistance ?POINT1 ?POINT2
?LENGTH) means that ?LENGTH is the distance between the two
&%GeometricPoints ?POINT1 and ?POINT2.")

(=>
   (geometricDistance ?POINT1 ?POINT2 ?LENGTH)
   (geometricDistance ?POINT2 ?POINT1 ?LENGTH))

(instance radius BinaryPredicate)
(instance radius SingleValuedRelation)
(instance radius TotalValuedRelation)
(domain radius 1 Circle)
(domain radius 2 LengthMeasure)
(documentation radius "(&%radius ?CIRCLE ?LENGTH) means that the radius of
the &%Circle ?CIRCLE has a length of ?LENGTH.")

(=>
   (radius ?CIRCLE ?RADIUS)
   (exists (?POINT)
      (forall (?PART)
         (=>
            (pointOfFigure ?PART ?CIRCLE)
            (geometricDistance ?PART ?POINT ?RADIUS)))))

(instance tangent BinaryPredicate)
(domain tangent 1 OneDimensionalFigure)
(domain tangent 2 Circle)
(documentation tangent "(&%tangent ?LINE ?CIRCLE) means that the straight line
?LINE is tangent to the &%Circle ?CIRCLE, i.e. ?LINE touches ?CIRCLE without
intersecting it.")

(=>
   (tangent ?LINE ?CIRCLE)
   (exists (?POINT1)
      (and
         (pointOfFigure ?POINT1 ?LINE)
         (pointOfFigure ?POINT1 ?CIRCLE)
         (forall (?POINT2)
            (=>
               (and
                  (pointOfFigure ?POINT2 ?LINE)
                  (pointOfFigure ?POINT2 ?CIRCLE))
               (equal ?POINT1 ?POINT2))))))

(subrelation contestParticipant agent)
(instance contestParticipant TotalValuedRelation)
(domain contestParticipant 1 Contest)
(domain contestParticipant 2 Agent)
(documentation contestParticipant "(&%contestParticipant ?CONTEST ?AGENT)
means that ?AGENT is one of the sides in the &%Contest ?CONTEST.  For
example, if the ?CONTEST is a football game, then ?AGENT would be one of
the opposing teams.  For another example, if ?CONTEST is a &%Battle, then
?AGENT would be one of the sides fighting each other.")

(subclass CivilWar War)
(documentation CivilWar "A &%War in which the fighting &%GeopoliticalAreas
are both part of the same &%Nation.")

(=>
   (instance ?WAR CivilWar)
   (exists (?NATION)
      (and
         (instance ?NATION Nation)
         (forall (?AGENT)
            (=>
               (contestParticipant ?WAR ?AGENT)
               (geopoliticalSubdivision ?AGENT ?NATION))))))

(subclass Debating Contest)
(subclass Debating LinguisticCommunication)
(documentation Debating "A &%Contest where each participant holds a different
view regarding some issue, and each participant attempts to prove, by
rhetoric or evidence, that his/her own views about a particular matter are
correct and/or that the views of the other participants are incorrect.")

(subclass Negotiating Contest)
(subclass Negotiating LinguisticCommunication)
(documentation Negotiating "A &%Contest where each participant attempts to
maximize his self-interest in a &%Promise that marks the end of the &%Contest.")

(=>
   (instance ?NEGOTIATE Negotiating)
   (hasPurpose ?NEGOTIATE (exists (?COMMIT)
                             (and
                                (instance ?COMMIT Committing)
                                (subProcess ?COMMIT ?NEGOTIATE)
                                (finishes (WhenFn ?COMMIT) (WhenFn ?NEGOTIATE))))))

(subclass BusinessCompetition Contest)
(documentation BusinessCompetition "Any &%Contest where the &%contestParticipants
are &%Corporations and the aim is to win as many customers as possible.")

(=>
   (and
      (instance ?CONTEST BusinessCompetition)
      (contestParticipant ?CONTEST ?AGENT))
   (instance ?AGENT Corporation))

(subclass Boxing ViolentContest)
(subclass Boxing Sport)
(documentation Boxing "A sport which involves two participants who try to
knock each other out in a limited number of rounds.  Note that each instance
of &%Boxing is a boxing match.")

(subclass Gymnastics Sport)
(documentation Gymnastics "A sport which involves exercises of agility on a
range of gymnastic equipment.")

(subclass Baseball Sport)
(documentation Baseball "A sport which involves two teams of 9 players each
that take turns at bat and attempt to score runs.  Note that each instance
of &%Baseball is a baseball game.")

(subclass BaseballTeam SportsTeam)
(documentation BaseballTeam "The class of &%SportsTeams that play &%Baseball.")

(=>
   (instance ?TEAM BaseballTeam)
   (capability Baseball agent ?TEAM))

(subclass BaseballInning Maneuver)
(documentation BaseballInning "A division of a &%Baseball game.  A normal game
consists of 9 innings, and each inning involves a turn a bat for both teams.")

(=>
   (instance ?INNING BaseballInning)
   (exists (?GAME)
      (and
         (instance ?GAME Baseball)
         (subProcess ?INNING ?GAME))))

(instance legalRelation BinaryPredicate)
(instance legalRelation SymmetricRelation)
(domain legalRelation 1 CognitiveAgent)
(domain legalRelation 2 CognitiveAgent)
(documentation legalRelation "(&%legalRelation ?AGENT1 ?AGENT2) means
there is a relationship involving legal obligations between ?AGENT1 and
?AGENT2.  Some examples include marriage, adoption, etc.")

(=>
   (legalRelation ?AGENT1 ?AGENT2)
   (exists (?DECLARE ?OBLIGATION)
      (and
         (instance ?DECLARE Declaring)
         (confersObligation ?OBLIGATION ?DECLARE ?AGENT1)
         (confersObligation ?OBLIGATION ?DECLARE ?AGENT2))))

(instance Blind BiologicalAttribute)
(documentation Blind "The &%Attribute that applies to &%Animals and &%Humans
that are unable to see.")

(=>
   (attribute ?AGENT Blind)
   (not (capability Seeing agent ?AGENT)))

(instance Fist BodyPosition)
(documentation Fist "The &%BodyPosition of having the fingers drawn into
the palm so that the hand can be used for striking something.")

(=>
   (attribute ?HAND Fist)
   (instance ?HAND Hand))

(subclass LyingDown BodyMotion)
(documentation LyingDown "The &%BodyMotion of moving from a &%Sitting
to a &%Prostrate position.")

(=>
   (and
      (instance ?LIE LyingDown)
      (agent ?LIE ?AGENT))
   (and
      (holdsDuring (BeginFn (WhenFn ?LIE)) (attribute ?AGENT Sitting))
      (holdsDuring (EndFn (WhenFn ?LIE)) (attribute ?AGENT Prostrate))))

(subclass SittingDown BodyMotion)
(documentation SittingDown "The &%BodyMotion of moving from a &%Standing
to a &%Sitting position.")

(=>
   (and
      (instance ?SIT SittingDown)
      (agent ?SIT ?AGENT))
   (and
      (holdsDuring (BeginFn (WhenFn ?SIT)) (attribute ?AGENT Standing))
      (holdsDuring (EndFn (WhenFn ?SIT)) (attribute ?AGENT Sitting))))

(subclass StandingUp BodyMotion)
(documentation StandingUp "The &%BodyMotion of moving from a &%Sitting
to a &%Standing position.")

(=>
   (and
      (instance ?STAND StandingUp)
      (agent ?STAND ?AGENT))
   (and
      (holdsDuring (BeginFn (WhenFn ?STAND)) (attribute ?AGENT Sitting))
      (holdsDuring (EndFn (WhenFn ?STAND)) (attribute ?AGENT Standing))))

(subclass OpeningEyes BodyMotion)
(disjoint OpeningEyes ClosingEyes)
(documentation OpeningEyes "The &%BodyMotion of relaxing the eye lids so that
the corneas are exposed to light.")

(subclass ClosingEyes BodyMotion)
(documentation ClosingEyes "The &%BodyMotion of tensing the eye lids so that
the corneas are not exposed to light.")

(subclass Winking ClosingEyes)
(subclass Winking Gesture)
(documentation Winking "Any instance of &%ClosingEyes which is intended to
express something to someone else.")

(subclass Shrugging BodyMotion)
(subclass Shrugging Gesture)
(documentation Shrugging "Moving the &%Shoulders in such a way that the motion
is intended to express something to someone else.")

(=>
   (and
      (instance ?SHRUG Shrugging)
      (patient ?SHRUG ?SHOULDER))
   (instance ?SHOULDER Shoulder))

(subclass Trembling BodyMotion)
(subclass Trembling (ComplementFn IntentionalProcess))
(documentation Trembling "Any &%BodyMotion which is involuntary and which is
repeated many times over a short time frame, e.g. a tremor in the hands.")

(subclass DomesticAnimal Animal)
(disjoint DomesticAnimal Human)
(documentation DomesticAnimal "Any &%Animal that is kept by a &%Human, as
a pet, as livestock, for exhibition, etc.")

(=>
   (instance ?ANIMAL DomesticAnimal)
   (exists (?KEEP ?PERSON)
      (and
         (instance ?KEEP Keeping)
         (agent ?KEEP ?PERSON)
         (instance ?PERSON Human)
         (patient ?KEEP ?ANIMAL))))

(=>
   (instance ?FEED Fodder)
   (hasPurpose ?FEED (exists (?ANIMAL ?EAT)
                        (and
                           (instance ?ANIMAL DomesticAnimal)
                           (instance ?EAT Eating)
                           (agent ?EAT ?ANIMAL)
                           (patient ?EAT ?FEED)))))

(subclass Horse HoofedMammal)
(subclass Horse DomesticAnimal)
(documentation Horse "A domesticated &%HoofedMammal that is used for
transportation and work.")

(subclass Donkey HoofedMammal)
(subclass Donkey DomesticAnimal)
(documentation Donkey "A domesticated &%HoofedMammal that is used for
work.")

(subclass Mule HoofedMammal)
(subclass Mule DomesticAnimal)
(documentation Mule "The product of a &%Male &%Donkey and a &%Female
&%Horse.  &%Mules are always sterile.")

(=>
   (instance ?MULE Mule)
   (exists (?DONKEY ?HORSE)
      (and
         (father ?MULE ?DONKEY)
         (instance ?DONKEY Donkey)
         (mother ?MULE ?HORSE)
         (instance ?HORSE Horse))))

(=>
   (instance ?MULE Mule)
   (not (capability SexualReproduction agent ?MULE)))

(subclass Sheep HoofedMammal)
(subclass Sheep DomesticAnimal)
(documentation Sheep "A domesticated &%HoofedMammal that is bred for its
wool and for its meat (known as mutton).")

(subclass Cow HoofedMammal)
(subclass Cow DomesticAnimal)
(documentation Cow "A domesticated &%HoofedMammal that is raised for milk
and beef, and is also used for work.")

(subclass FemaleCow Cow)
(documentation FemaleCow "A &%Cow that is &%Female.")

(<=>
   (instance ?COW FemaleCow)
   (and
      (instance ?COW Cow)
      (attribute ?COW Female)))

(subclass Chicken Bird)
(subclass Chicken DomesticAnimal)
(documentation Chicken "A subclass of &%Bird that is raised for its meat
and for its eggs.")

(subclass Hen Chicken)
(documentation Hen "A &%Female &%Chicken.")

(<=>
   (instance ?HEN Hen)
   (and
      (instance ?HEN Chicken)
      (attribute ?HEN Female)))

(subclass ChickenMeat Meat)
(documentation ChickenMeat "&%Meat that was originally part of a &%Chicken.")

(<=>
   (instance ?MEAT ChickenMeat)
   (exists (?CHICKEN)
      (and
         (instance ?MEAT Meat)
         (instance ?CHICKEN Chicken)
         (part ?MEAT ?CHICKEN))))

(subclass Mouse Rodent)
(documentation Mouse "A &%Rodent that has a hairless tail like a rat but that
is smaller than a rat.")

(subclass Hay Fodder)
(documentation Hay "&%Grass that has been cut and cured for use as &%Fodder.")

(=>
   (instance ?HAY Hay)
   (exists (?MAKE)
      (and
         (instance ?MAKE Making)
         (resource ?MAKE ?GRASS)
         (instance ?GRASS Grass)
         (result ?MAKE ?HAY))))

(subclass Copying Making)
(documentation Copying "&%Making a &%copy of something.")

(=>
   (and
      (instance ?COPY Copying)
      (resource ?COPY ?THING1)
      (result ?COPY ?THING2))
   (copy ?THING1 ?THING2))

(subclass Vacationing RecreationOrExercise)
(documentation Vacationing "Taking time off from &%Working.")

(=>
   (and
      (instance ?VACATION Vacationing)
      (instance ?WORK Working)
      (agent ?VACATION ?PERSON)
      (agent ?WORK ?PERSON)
      (instance ?PERSON Human))
   (not (overlapsTemporally (WhenFn ?VACATION) (WhenFn ?WORK))))

(subclass Working FinancialTransaction)
(documentation Working "Any &%FinancialTransaction where someone exchanges
his/her labor for an instance of &%CurrencyMeasure.")

(subclass Farming Working)
(documentation Farming "Operating a farm, e.g. planting and harvesting crops,
tending livestock, etc.")

(=>
   (and
      (instance ?FARMING Farming)
      (agent ?FARMING ?FARMER))
   (exists (?FARM)
      (and
         (instance ?FARM Farm)
         (holdsDuring (WhenFn ?FARMING) (located ?FARMER ?FARM)))))

(subclass Serving Working)
(documentation Serving "Working as a waiter or servant, either for an
&%Organization (e.g. a restaurant) or for a person or family.")

(subclass Sales Working)
(documentation Sales "Any instance of &%Working that involves &%Selling or
trying to sell items.")

(subAttribute Retired Unemployed)
(documentation Retired "Voluntary unemployment toward the end of one's life.")

(subclass SkilledOccupation Position)
(documentation SkilledOccupation "Any &%Position which requires
learning a set of skills.")

(=>
   (and
      (instance ?OCCUPATION SkilledOccupation)
      (attribute ?PERSON ?OCCUPATION))
   (exists (?TRAINING)
      (and
         (instance ?TRAINING EducationalProcess)
         (destination ?TRAINING ?PERSON))))

(subclass ManualLabor Position)
(documentation ManualLabor "Any &%Position which involves manual
work.")

(subclass UnskilledOccupation ManualLabor)
(disjoint UnskilledOccupation SkilledOccupation)
(documentation UnskilledOccupation "Any &%Position which does not
require learning a set of skills.")

(instance Maid UnskilledOccupation)
(documentation Maid "A &%Position which involves &%Serving a person
or family.  Note that this &%Position is filled only by a &%Woman.")

(=>
   (attribute ?MAID Maid)
   (instance ?MAID Woman))

(=>
   (attribute ?MAID Maid)
   (exists (?SERVE)
      (and
         (instance ?SERVE Serving)
         (agent ?SERVE ?MAID))))

(instance TheaterProfession SkilledOccupation)
(documentation TheaterProfession "Often know as the stage, the
&%Position of performing live plays.")

(subclass Coach SkilledOccupation)
(documentation Coach "Any occupation that involves training an athlete or a
sports team.")

(subclass OccupationalTrade SkilledOccupation)
(subclass OccupationalTrade ManualLabor)
(documentation OccupationalTrade "Any &%Position that involves skilled
manual work.")

(subclass Profession SkilledOccupation)
(disjoint Profession OccupationalTrade)
(documentation Profession "Any occupation that requires at least a bachelor's
degree.")

(=>
   (and
      (or
         (instance ?ROLE SkilledTrade)
         (instance ?ROLE Profession))
      (attribute ?HUMAN ?ROLE))
   (exists (?FIELD)
      (and
         (instance ?FIELD FieldOfStudy)
         (knows ?HUMAN ?FIELD))))

(subclass Cleric Profession)
(documentation Cleric "The &%Profession of being in charge of or ministering
to a &%ReligousOrganization.")

(<=>
   (occupiesPosition ?PERSON Cleric ?ORG)
   (and
      (leader ?ORG ?PERSON)
      (instance ?ORG ReligiousOrganization)))

(subclass PoliceOfficer Profession)
(documentation PoliceOfficer "The &%Profession of being a police officer, i.e.
working for a law enforcement agency that is part of a &%Government.")

(subclass PoliceDetective PoliceOfficer)
(documentation PoliceDetective "The &%Profession of being a police
detective, i.e. being a &%PoliceOfficer whose duties include the
investigation of crimes.")

(subclass PrivateDetective Profession)
(disjoint PrivateDetective PoliceDetective)
(documentation PrivateDetective "The &%Profession of being a private detective,
i.e. a detective who can be hired for a fee to investigate something.")

(subclass Professor Profession)
(documentation Professor "The &%Profession of being a &%teacher at a
&%PostSecondarySchool.")

(=>
   (and
      (instance ?PROF Professor)
      (occupiesPosition ?PERSON ?PROF ?ORG))
   (and
      (teacher ?ORG ?PROF)
      (instance ?ORG PostSecondarySchool)))

(subclass MedicalDoctor Profession)
(documentation MedicalDoctor "The &%Profession of being a medical doctor,
i.e. having attended medical school and being licensed to practice medicine.")

(=>
   (attribute ?DOCTOR MedicalDoctor)
   (exists (?PROCESS1 ?PROCESS2)
      (and
         (subclass ?PROCESS1 DiagnosticProcess)
         (subclass ?PROCESS2 TherapeuticProcess)
         (capability ?PROCESS1 agent ?DOCTOR)
         (capability ?PROCESS2 agent ?DOCTOR))))

(subclass NewsReporter Profession)
(documentation NewsReporter "The &%Profession of being a news reporter, i.e.
investigating and reporting, in a publication or broadcast program, current
events.")

(subclass Science FieldOfStudy)
(documentation Science "Any &%FieldOfStudy which tests theories on the basis of careful observations and/or experiments and which has a cumulative body of results.")

(subclass SocialScience Science)
(documentation SocialScience "Any &%Science which studies human behavior, either in the aggregate, as do, for example, &%Economics and &%Linguistics, or with respect to the individual, as does &%Psychology.")

(subrelation subField subProposition)
(instance subField TransitiveRelation)
(instance subField IrreflexiveRelation)
(domain subField 1 FieldOfStudy)
(domain subField 2 FieldOfStudy)
(documentation subField "(&%subField ?FIELD1 ?FIELD2) means that ?FIELD1 is a proper part of the &%FieldOfStudy ?FIELD2.  For example, &%Physiology is a &%subField of &%Biology.")

(instance hasExpertise BinaryPredicate)
(domain hasExpertise 1 Human)
(domain hasExpertise 2 FieldOfStudy)
(documentation hasExpertise "(&%hasExpertise ?PERSON ?FIELD) means that ?PERSON has
studied the &%FieldOfStudy ?FIELD and is regarded as an expert.")

(=>
   (hasExpertise ?PERSON ?FIELD)
   (exists (?LEARN)
      (and
         (instance ?LEARN Learning)
         (agent ?LEARN ?PERSON)
         (realization ?LEARN ?FIELD))))

(instance hasOccupation BinaryPredicate)
(domain hasOccupation 1 Human)
(domainSubclass hasOccupation 2 IntentionalProcess)
(documentation hasOccupation "(&%hasOccupation ?PERSON ?WORK) means that ?PERSON
engages in activities of the class ?WORK as a means of earning a living.")

(=>
   (hasOccupation ?PERSON ?WORK)
   (exists (?INST)
      (and
         (instance ?INST ?WORK)
         (instance ?INST Working)
         (agent ?INST ?PERSON))))

(subclass Bleeding AutonomicProcess)
(documentation Bleeding "The release of &%Blood from an &%Animal in response
to an &%Injuring of some sort.")

(=>
   (instance ?BLEED Bleeding)
   (exists (?INJURY)
      (and
         (instance ?INJURY Injuring)
         (causes ?INJURY ?BLEED))))

(=>
   (and
      (instance ?BLEED Bleeding)
      (experiencer ?BLEED ?ANIMAL))
   (instance ?ANIMAL Animal))

(=>
   (and
      (instance ?BLEED Bleeding)
      (experiencer ?BLEED ?ANIMAL))
   (exists (?BLOOD)
      (and
         (instance ?BLOOD Blood)
         (holdsDuring (BeginFn (WhenFn ?BLEED)) (part ?BLOOD ?ANIMAL))
         (holdsDuring (EndFn (WhenFn ?BLEED)) (not (part ?BLOOD ?ANIMAL))))))


;; NOTE that the folllowing class was addede 01-19-04 by JC
;; in order to reconcile certain propositions which use 
;; 'Contract' as a class.  'Contract' is in fact a DeonticAttribute
;; and we substitute LegalContract where a class is required
;;  This is not yet properly axiomatized.

(subclass LegalContract Proposition)
(documentation LegalContract "A LegalContract is a Proposition consisting of a pair of promises, each conditioned upon the other.")

(=>
    (instance ?Contr LegalContract)
    (property ?Contr Contract))

(subclass ClosingContract Committing)
(documentation ClosingContract "Completing a &%Contract of some sort,
e.g. the purchase of a house, closing a business deal, etc.")

(=>
   (and
      (instance ?CLOSE ClosingContract)
      (agent ?CLOSE ?AGENT)
      (destination ?CLOSE ?CONTRACT)
      (instance ?CONTRACT LegalContract))
   (agreementMember ?CONTRACT ?AGENT))

(subclass Opening Motion)
(relatedInternalConcept Opening Closing)
(documentation Opening "The &%Class of &%Processes where an aperture is
created in an &%Object.  Note that the aperture may be created intentionally, as when one opens a door, or unintentionally, as when the ground ruptures in a seismic event.")

(subclass Closing Motion)
(documentation Closing "The &%Class of &%Processes where an aperture is
closed in an &%Object.")

(subclass PreparedFood Food)
(documentation PreparedFood "&%Food that is the result of &%Cooking.")

(=>
   (instance ?FOOD PreparedFood)
   (exists (?COOK)
      (and
         (instance ?COOK Cooking)
         (result ?COOK ?FOOD))))

(subclass RawFood Food)
(documentation RawFood "&%Food that is not the result of &%Cooking.")

(=>
   (instance ?FOOD RawFood)
   (not (exists (?COOK)
      (and
         (instance ?COOK Cooking)
         (result ?COOK ?FOOD)))))

(subclass SoupStock PreparedFood)
(documentation SoupStock "&%Food which is prepared by reducing &%Meat
and/or &%FruitOrVegetables to a translucent broth which can be used as
a base for soups or sauces.")

(subclass Coffee Beverage)
(subclass Coffee PreparedFood)
(documentation Coffee "A &%Beverage which is prepared by infusing ground,
roasted coffee beans into hot water.")

(subclass DateFruit FruitOrVegetable)
(documentation DateFruit "A &%FruitOrVegetable that is produced by the date
palm.")

(subclass Avocado FruitOrVegetable)
(documentation Avocado "A &%FruitOrVegetable that is shaped like a pear and
has a dark green skin and a rich meat.")

(instance protonNumber BinaryPredicate)
(instance protonNumber SingleValuedRelation)
(instance protonNumber TotalValuedRelation)
(domain protonNumber 1 PureSubstance)
(domain protonNumber 2 PositiveInteger)
(documentation protonNumber "(&%protonNumber ?SUBSTANCE ?NUMBER) means that
the &%PureSubstance ?SUBSTANCE has the number of &%Protons ?NUMBER.")

(=>
   (protonNumber ?SUBSTANCE ?NUMBER)
   (=>
      (and
         (part ?ATOM ?SUBSTANCE)
         (or
            (instance ?ATOM Atom)
            (instance ?ATOM Molecule)))
      (equal ?NUMBER (CardinalityFn (KappaFn ?PROTON
                                       (and
                                          (part ?PROTON ?ATOM)
                                          (instance ?PROTON Proton)))))))

(instance electronNumber BinaryPredicate)
(instance electronNumber SingleValuedRelation)
(instance electronNumber TotalValuedRelation)
(domain electronNumber 1 PureSubstance)
(domain electronNumber 2 PositiveInteger)
(documentation electronNumber "(&%electronNumber ?SUBSTANCE ?NUMBER) means that
the &%PureSubstance ?SUBSTANCE has the number of &%Electrons ?NUMBER.")

(=>
   (electronNumber ?TYPE ?NUMBER)
   (=>
      (and
         (part ?ATOM ?SUBSTANCE)
         (or
            (instance ?ATOM Atom)
            (instance ?ATOM Molecule)))
      (equal ?NUMBER (CardinalityFn (KappaFn ?ELECTRON
                                       (and
                                          (part ?ELECTRON ?ATOM)
                                          (instance ?ELECTRON Electron)))))))


;; =================
;; Elements Ontology
;; =================

;; The following content is borrowed from the Elements Ontology.

(subrelation atomicNumber protonNumber)
(domainSubclass atomicNumber 1 ElementalSubstance)
(domain atomicNumber 2 PositiveInteger)
(documentation atomicNumber "(&%atomicNumber ?ELEMENT ?NUMBER) means that the
&%ElementalSubstance ?ELEMENT has the atomic number ?NUMBER. The atomic number
is the number of &%Protons in the nucleus of an &%Atom.")

(subclass Oxygen ElementalSubstance)
(atomicNumber Oxygen 8)
(documentation Oxygen "A colourless, odourless gaseous element belonging to
group 16 of the periodic table. It is the most abundant element present in
the earth's crust. It also makes up 20.8 percent of the Earth's atmosphere.
For industrial purposes, it is separated from liquid air by fractional
distillation. It is used in high temperature welding, and in breathing. It
commonly comes in the form of Oxygen, but is found as Ozone in the upper
atmosphere. It was discovered by Priestley in 1774.")

(=>
   (and
      (instance ?ATOM Oxygen)
      (instance ?ATOM Atom))
   (measure ?ATOM (MeasureFn 15.9994 Amu)))

(subclass Chlorine ElementalSubstance)
(atomicNumber Chlorine 17)
(documentation Chlorine "Halogen element.  Poisonous greenish-yellow gas.
Occurs widely in nature as sodium chloride in seawater.  Reacts directly
with many elements and compounds, strong oxidizing agent.  Discovered by
Karl Scheele in 1774.  Humphrey David confirmed it as an element in
1810.")

(=>
  (and
    (instance ?ATOM Chlorine)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 35.453 Amu)))

(subclass Sodium ElementalSubstance)
(atomicNumber Sodium 11)
(documentation Sodium "Soft silvery reactive element belonging to group 1
of the periodic table (alkali metals).  It is highly reactive, oxidizing
in air and reacting violently with water, forcing it to be kept under oil.
It was first isolated by Humphrey Davy in 1807.")

(=>
  (and
    (instance ?ATOM Sodium)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 22.9898 Amu)))

(subclass Hydrogen ElementalSubstance)
(atomicNumber Hydrogen 1)
(documentation Hydrogen "Colourless, odourless gaseous chemical element.
Lightest and most abundant element in the universe.  Present in water and
in all organic compounds.  Chemically reacts with most elements.
Discovered by Henry Cavendish in 1776.")

(=>
  (and
    (instance ?ATOM Hydrogen)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 1.0079 Amu)))

(subclass Carbon ElementalSubstance)
(atomicNumber Carbon 6)
(documentation Carbon "Carbon is a member of group 14 of the periodic
table.  It has three allotropic forms of it, diamonds, graphite and
fullerite.  Carbon-14 is commonly used in radioactive dating.  Carbon
occurs in all organic life and is the basis of organic chemistry.  Carbon
has the interesting chemical property of being able to bond with itself,
and a wide variety of other elements.")

(=>
  (and
    (instance ?ATOM Carbon)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 12.01115 Amu)))

(subclass Iodine ElementalSubstance)
(atomicNumber Iodine 53)
(documentation Iodine "Dark violet nonmetallic element, belongs to group
17 of the periodic table.  Insoluble in water.  Required as a trace
element for living organisms.  One stable isotope, I-127 exists, in
addition to fourteen radioactive isotopes.  Chemically the least reactive
of the halogens, and the most electropositive metallic halogen.
Discovered in 1812 by Courtois.")

(=>
  (and
    (instance ?ATOM Iodine)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 126.904 Amu)))

(subclass Iron ElementalSubstance)
(atomicNumber Iron 26)
(documentation Iron "Silvery malleable and ductile metallic transition
element.  Has nine isotopes and is the fourth most abundant element in the
earth's crust.  Required by living organisms as a trace element (used in
hemoglobin in humans.) Quite reactive, oxidizes in moist air, displaces
hydrogen from dilute acids and combines with nonmetallic elements.")

(=>
  (and
    (instance ?ATOM Iron)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 55.847 Amu)))

(subclass Helium ElementalSubstance)
(atomicNumber Helium 2)
(documentation Helium "Colourless, odourless gaseous nonmetallic element.
Belongs to group 18 of the periodic table.  Lowest boiling point of all
elements and can only be solidified under pressure.  Chemically inert, no
known compounds.  Discovered in the solar spectrum in 1868 by Lockyer.")

(=>
  (and
    (instance ?ATOM Helium)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 4.0026 Amu)))

(subclass Nitrogen ElementalSubstance)
(atomicNumber Nitrogen 7)
(documentation Nitrogen "Colourless, gaseous element which belongs to
group 15 of the periodic table.  Constitutes ~78 percent of the atmosphere
and is an essential part of the ecosystem.  Nitrogen for industrial
purposes is acquired by the fractional distillation of liquid air.
Chemically inactive, reactive generally only at high temperatures or in
electrical discharges.  It was discovered in 1772 by D.  Rutherford.")

(=>
  (and
    (instance ?ATOM Nitrogen)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 14.0067 Amu)))

(subclass Copper ElementalSubstance)
(atomicNumber Copper 29)
(documentation Copper "Red-brown transition element.  Known by the Romans
as 'cuprum.' Extracted and used for thousands of years.  Malleable,
ductile and an excellent conductor of heat and electricity.  When in moist
conditions, a greenish layer forms on the outside.")

(=>
  (and
    (instance ?ATOM Copper)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 63.54 Amu)))

(subclass Zinc ElementalSubstance)
(atomicNumber Zinc 30)
(documentation Zinc "Blue-white metallic element.  Occurs in multiple
compounds naturally.  Five stable isotopes are six radioactive isotopes
have been found.  Chemically a reactive metal, combines with oxygen and
other non-metals, reacts with dilute acids to release hydrogen.")

(=>
  (and
    (instance ?ATOM Zinc)
    (instance ?ATOM Atom))
  (measure ?ATOM (MeasureFn 65.38 Amu)))


;; ==================
;; Financial Ontology
;; ==================

;; The following content is borrowed from the Financial Ontology.

(subclass Stock FinancialInstrument)
(documentation Stock "An instrument that signifies an ownership position,
or equity, in a &%Corporation, and represents a claim on its proportionate
share in the corporation's assets and profits.")

(subclass Share CurrencyMeasure)
(instance Share UnitOfMeasure)
(documentation Share "A &%UnitOfMeasure representing one unit of ownership
in a corporation, &%MutualFund, or limited partnership.")

(instance stockOf BinaryPredicate)
(domain stockOf 1 Stock)
(domain stockOf 2 Corporation)
(documentation stockOf "(&%stockOf ?Stock ?Corporation) means that ?Stock
is issued by the &%Corporation ?Corporation.")

(instance stockHolder BinaryPredicate)
(domain stockHolder 1 Stock)
(domain stockHolder 2 CognitiveAgent)
(documentation stockHolder "(&%stockHolder ?Stock ?Agent) means that
?Agent possesses the &%Stock ?Stock.")

(subclass FinancialOrganization Corporation)
(documentation FinancialOrganization "The class &%FinancialOrganization
includes, as subclasses, &%BankOrganization, &%CreditUnion and
&%SavingsAndLoan.")

(subclass BankOrganization FinancialOrganization)
(documentation BankOrganization "An organization, chartered by a state
or federal government, which does most or all of the following: receives
&%Deposits, honors &%FinancialInstruments drawn on them, and pays
interest on them; discounts &%Notes, makes &%Loans, and invests in
&%SecuredLoans; collects &%Checks, &%Drafts and &%Notes, certifies
depositor's checks; and issues drafts and Cashier's checks.")

(subclass CreditUnion FinancialOrganization)
(documentation CreditUnion "Credit unions are non-profit, member-owned,
financial cooperatives. They are operated entirely by and for their
members. When money is deposited in a credit union, the depositor
becomes a member of the union because the deposit is considered partial
ownership in the credit union. Many large organizations have established
credit unions for their employees.")

(subclass SavingsAndLoan FinancialOrganization)
(documentation SavingsAndLoan "A federally or state chartered
&%FinancialOrganization that takes &%Deposits from individuals, funds
&%Mortgages, and pays &%Dividends.")

(subclass FinancialAccount LegalContract)
(documentation FinancialAccount "A formal banking, brokerage, or business
relationship established to provide for regular services, dealings, and
other financial transactions.")

(instance agreementMember BinaryPredicate)
(instance agreementMember TotalValuedRelation)
(domain agreementMember 1 LegalContract)
(domain agreementMember 2 CognitiveAgent)
(documentation agreementMember "(&%agreementMember ?Agreement ?Agent)
means that ?Agent is one of the participants of the &%Contract
?Agreement.")

(subrelation financialAccount agreementMember)
(domain financialAccount 1 FinancialAccount)
(domain financialAccount 2 FinancialOrganization)
(documentation financialAccount "A formal banking, brokerage, or business
relationship established to provide for regular services, dealings, and
other financial transactions.  (&%accountAt ?ACCOUNT ?ORG) means that
?ACCOUNT is a financial account opened at the &%FinancialOrganization
?ORG.")

(instance price TernaryPredicate)
(domain price 1 Object)
(domain price 2 CurrencyMeasure)
(domain price 3 Agent)
(documentation price "(&%price ?Obj ?Money ?Agent) means that ?Agent
pays the amount of money ?Money for ?Obj.")

(=>
   (price ?Obj ?Money ?Agent)
   (exists (?Buying)
      (and
         (instance ?Buying Buying)
         (agent ?Buying ?Agent)
         (patient ?Buying ?Obj)
         (transactionAmount ?Buying ?Money))))

(instance transactionAmount BinaryPredicate)
(instance transactionAmount SingleValuedRelation)
(instance transactionAmount TotalValuedRelation)
(domain transactionAmount 1 FinancialTransaction)
(domain transactionAmount 2 CurrencyMeasure)
(documentation transactionAmount "(&%transactionAmount ?Transaction
?Amount) means that ?Amount is an instance of &%CurrencyMeasure being
exhanged in a &%FinancialTransaction ?Transaction.")

(=>
   (transactionAmount ?Transaction ?Amount)
   (exists (?Obj)
      (and
         (patient ?Transaction ?Obj)
         (monetaryValue ?Obj ?Amount))))

(instance profit AsymmetricRelation)
(domain profit 1 FinancialTransaction)
(domain profit 2 CurrencyMeasure)
(documentation profit "The positive gain from an investment or business
operation after subtracting for all expenses.")

(instance loss AsymmetricRelation)
(domain loss 1 FinancialTransaction)
(domain loss 2 CurrencyMeasure)
(documentation loss "The amount by which the cost of an investment or
business operation exceeds its return, i.e. the negative quantity left
after subtracting for all expenses.")

(subrelation financialAsset possesses)
(domain financialAsset 1 Agent)
(domain financialAsset 2 Object)
(documentation financialAsset "A predicate that relates an &%Agent to any
item of economic value owned by the &%Agent.  Examples of financial assets
are cash, securities, accounts receivable, inventory, office equipment, a
house, a car, and other property.")

(=>
	(financialAsset ?Agent ?Asset)
	(exists (?Value)
		(monetaryValue ?Asset ?Value)))

(subclass SomethingOfValue Entity)
(documentation SomethingOfValue "Any entity which has any kind of value, monetary or emotional, to a cognitive agent. The value may be negative.")

(subclass Asset SomethingOfValue)
(documentation Asset "Something of positive monetary value owned by a cognitive agent.  Something that has negative monetary vaue is an obligaion or a debt.")

;;  <axcom>An asset belongs to a CognitiveAgent.</axcom>

(=>
	(instance ?Asset Asset)
	(exists (?Agent)
		(and
		  (instance ?Agent CognitiveAgent)
		  (financialAsset ?Agent ?Asset))))


;;  <axcom>An asset has a positive monetary value for the agent that owns it.</axcom>

(=>
	(instance ?Asset Asset)
	(exists (?Value)
		(and
		  (instance ?Value CurrencyMeasure)
		  (monetaryValue ?Asset ?Value)
		  (greaterThanOrEqualTo MagnitudeFn(?Value) 0))))

(subclass Debt SomethingOfValue)
(documentation Debt "Something of negative monetary value which is an obligation (legal or moral) of a CognitiveAgent.")

;;  <axcom>A debt has a negative monetary value to the agent.</axcom>

(=>
	(instance ?Debt Debt)
	(exists (?Value)
		(and
		  (instance ?Value CurrencyMeasure)
		  (monetaryValue ?Debt ?Value)
		  (greaterThan 0 MagnitudeFn(?Value)))))

(subclass FillingAnOrder FinancialTransaction)
(documentation FillingAnOrder "Execute an order or buy or sell a &%Security.")

(=>
   (instance ?FILL FillingAnOrder)
   (exists (?OBJ)
      (and
         (patient ?TRANS ?OBJ)
         (instance ?OBJ Security))))

(subclass Security FinancialInstrument)
(documentation Security "An investment instrument, other than an insurance
policy or a fixed annuity issued by a corporation, government, or other
organization which offers evidence of debt or equity.")

(instance currentAccountBalance TernaryPredicate)
(domain currentAccountBalance 1 FinancialAccount)
(domain currentAccountBalance 2 Day)
(domain currentAccountBalance 3 CurrencyMeasure)
(documentation currentAccountBalance "(&%currentAccountBalance ?Account
?Date ?Amount) means that ?Amount is the balance of the &%FinancialAccount
?Account as of the date ?Date.")

(instance interestEarned TernaryPredicate)
(domain interestEarned 1 FinancialAccount)
(domain interestEarned 2 CurrencyMeasure)
(domain interestEarned 3 TimeInterval)
(documentation interestEarned "(&%interestEarned ?Account ?Interest ?Period)
means that ?Interest is the amount earned on the &%FinancialAccount ?Account,
for the &%TimeInterval ?Period.")

(=>
   (and
      (interestEarned ?Account ?Interest ?Time)
      (currentAccountBalance ?Account (BeginFn ?Time) ?Balance))
   (currentAccountBalance ?Account (EndFn ?Time) (AdditionFn ?Balance ?Interest)))

(subclass FinancialService CommercialService)
(documentation FinancialService "Services performed by
&%FinancialOrganizations.")

(=>
	(instance ?Service FinancialService)
	(exists (?Org)
		(and
			(instance ?Org FinancialOrganization)
			(agent ?Service ?Org))))

(instance customer IrreflexiveRelation)
(instance customer AsymmetricRelation)
(instance customer BinaryPredicate)
(domain customer 1 Agent)
(domain customer 2 Corporation)
(documentation customer "A very general relation that exists whenever there
is a &%CommercialService between an &%Agent and an &%Organization.
(&%customer ?AGENT ?ORG) means that ?AGENT is a customer of the &%Corporation
?ORG.")

(<=>
	(customer ?Agent ?Org)
	(exists (?Service)
		(and
			(instance ?Service CommercialService)
			(agent ?Service ?Org)
			(destination ?Service ?Agent))))

(=>
	(and
		(accountHolder ?Account ?Agent)
		(financialAccount ?Account ?Bank))
	(customer ?Agent ?Bank))

(subrelation accountHolder agreementMember)
(domain accountHolder 1 FinancialAccount)
(domain accountHolder 2 CognitiveAgent)
(documentation accountHolder "(&%accountHolder ?Account ?Agent) means that
?Agent is the account holder of the &%FinancialAccount ?Account.")

(instance income TernaryPredicate)
(domain income 1 Human)
(domain income 2 CurrencyMeasure)
(domain income 3 TimeInterval)
(documentation income "(&%income ?Agent ?Money ?Period) means that
?Money is the amount of money or its equivalent received during a period
of time in exchange for labor or services, from the sale of goods or
property, or as profit from financial investments")

(instance incomeEarned TernaryPredicate)
(domain incomeEarned 1 Human)
(domain incomeEarned 2 CurrencyMeasure)
(domain incomeEarned 3 IntentionalProcess)
(documentation incomeEarned "(&%incomeEarned ?Agent ?Money ?Action) means
that ?Agent earned the amount of money ?Money from performing ?Action.  Note
that &%incomeEarned denotes that amount of money made before taxes are
deducted.")

(=>
	(incomeEarned ?Agent ?Money ?Activity)
	(agent ?Activity ?Agent))

(subclass ChargingAFee FinancialTransaction)
(documentation ChargingAFee "An activity of a fee being charged")

(subclass Tax ChargingAFee)
(documentation Tax "A fee charged by a government on a product, income
or activity.")

(=>
	(instance ?Tax Tax)
	(exists (?Org)
		(and
			(instance ?Org Government)
			(agent ?Tax ?Org))))

(subclass DutyTax Tax)
(documentation DutyTax "A &%Tax that is levied on imports and/or exports.")

(=>
   (and
      (instance ?TAX DutyTax)
      (patient ?TAX ?OBJ))
   (exists (?TRANSFER ?NATION1 ?NATION2)
      (and
         (instance ?TRANSFER Transfer)
         (patient ?TRANSFER ?OBJ)
         (origin ?TRANSFER ?NATION1)
         (destination ?TRANSFER ?NATION2)
         (instance ?NATION1 Nation)
         (instance ?NATION2 Nation)
         (not (equal ?NATION1 ?NATION2))
         (earlier (WhenFn ?TRANSFER) (WhenFn ?TAX))
         (causes ?TRANSFER ?TAX))))

;; definition of Payment

(subclass Payment FinancialTransaction)
(documentation Payment "The partial or complete discharge of an obligation by its settlement in the form of the transfer of funds, assets, or services equal to the monetary value of part or all of the debtor's obligation.")

(=>
	(and
		(instance ?Payment Payment)
		(origin ?Payment ?Account)
		(instance ?Account FinancialAccount)
		(transactionAmount ?Payment ?Amount)
		(currentAccountBalance ?Account (ImmediatePastFn (WhenFn ?Payment)) ?Balance1)
		(equal ?Balance2 (SubtractionFn ?Balance1 ?Amount)))
	(currentAccountBalance ?Account (ImmediateFutureFn (WhenFn ?Payment)) ?Balance2))

;; definition of Check

(subclass Check FinancialInstrument)
(documentation Check "A &%FinancialInstrument drawn against deposited funds,
to pay a specified amount of money to a specific person upon demand.")

(=>
	(instance ?Check Check)
	(exists (?Value)
		(monetaryValue ?Check ?Value)))

(=>
	(instance ?Check Check)
	(exists (?Account)
		(checkAccount ?Check ?Account)))

(=>
	(and
		(monetaryValue ?Check ?Amount)
		(checkAccount ?Check ?Account)
		(instance ?Processing ProcessingACheck)
		(patient ?Processing ?Check))
	(exists (?Withdrawal)
		(and
			(instance ?Withdrawal Withdrawal)
			(instrument ?Withdrawal ?Check)
			(meetsTemporally (WhenFn ?Processing) (WhenFn ?Withdrawal))
			(transactionAmount ?Withdrawal ?Amount)
			(origin ?Withdrawal ?Account))))

(=>
	(and
		(monetaryValue ?Check ?Amount)
		(instance ?Processing ProcessingACheck)
		(patient ?Processing ?Check)
		(destination ?Processing ?Account)
		(instance ?Account FinancialAccount))
	(exists (?Deposit)
		(and
			(instance ?Deposit Deposit)
			(instrument ?Deposit ?Check)
			(meetsTemporally (WhenFn ?Processing) (WhenFn ?Deposit))
			(transactionAmount ?Deposit ?Amount)
			(destination ?Deposit ?Account))))

(=>
	(and
		(instance ?Check Check)
		(instance ?Processing ProcessingACheck)
		(patient ?Processing ?Check))
	(exists (?Depositing)
		(and
			(instance ?Depositing DepositingACheck)
			(patient ?Depositing ?Check)
			(time ?Depositing (ImmediatePastFn (WhenFn ?Processing))))))

(=>
	(and
		(instance ?Depositing DepositingACheck)
		(instance ?Check Check)
		(agent ?Depositing ?Agent))
	(signedBy ?Check ?Agent))

(=>
	(and
		(instance ?Drawing DrawingACheck)
		(patient ?Drawing ?Check)
		(instance ?Processing ProcessingACheck)
		(patient ?Processing ?Check)
		(meetsTemporally (WhenFn ?Drawing) ?Time)
		(meetsTemporally ?Time (WhenFn ?Processing))
            (duration ?Time ?Duration))
	(lessThan ?Duration (MeasureFn 6 MonthDuration)))

;; Definition of PayCheck.

(subclass PayCheck Check)
(documentation PayCheck "A check issued to an employee in payment of salary or wages.")

(=>
	(and
	    (instance ?Check Paycheck)
	    (issuedBy ?Check ?Organization)
          (instance ?Give Giving)
          (destination ?Give ?Agent))
	(employs ?Organization ?Agent))

(subclass EconomicActivity IntentionalProcess)
(documentation EconomicActivity "Broadly, any intentional action by a CognitiveAgent that involves creation or consumption of articles of commerce, transfer or conversion of financial assets, or any other action performed with the general intention of designing, creating, transporting, or exchanging things of value.")

(subclass UsingAnAccount EconomicActivity)
(documentation UsingAnAccount "Putting money into ro taking money out of a FinancialAccount.")

;; definition of checkAccount

(instance checkAccount BinaryPredicate)
(domain checkAccount 1 Check)
(domain checkAccount 2 FinancialAccount)
(documentation checkAccount "(&%checkAccount ?Check ?Account) means that ?Account
is the &%FinancialAccount from which the amount specifed on the check is paid.")

;; definition of DrawingACheck

(subclass DrawingACheck UsingAnAccount)
(documentation DrawingACheck "An activity of paying by a check.")

(=>
	(and
		(instance ?Drawing DrawingACheck)
		(patient ?Drawing ?Check)
		(agent ?Drawing ?Agent)
		(checkAccount ?Check ?Account))
	(accountHolder ?Account ?Agent))

;; definition of DepositingACheck

(subclass DepositingACheck UsingAnAccount)
(documentation DepositingACheck "An activity of depositing a check into a
&%FinancialOrganization.")

(=>
	(instance ?Depositing DepositingACheck)
	(exists (?Check)
		(and
			(instance ?Check Check)
			(patient ?Depositing ?Check))))

(=>
	(and
		(instance ?Depositing DepositingACheck)
		(patient ?Depositing ?Check)
		(instance ?Check Check)
		(checkAccount ?Check ?Account)
		(monetaryValue ?Check ?Amount))
	(exists (?Deposit)
		(and
			(instance ?Deposit Deposit)
			(destination ?Deposit ?Account)
			(transactionAmount ?Deposit ?Amount))))

;; definition of ProcessingACheck

(subclass ProcessingACheck AuthorizationOfTransaction)
(documentation ProcessingACheck "An activity of paying the amount specified on the
check from funds on deposit.")

(=>
	(instance ?Processing ProcessingACheck)
	(exists (?Check)
		(and
			(instance ?Check Check)
			(patient ?Processing ?Check))))

(=>
	(instance ?Processing ProcessingACheck)
	(exists (?Authorization)
		(and
			(instance ?Authorization AuthorizationOfTransaction)
			(subProcess ?Authorization ?Processing))))

;; definition of DepositAccount

(subclass DepositAccount FinancialAccount)
(documentation DepositAccount "An account where money is deposited for checking, savings or
brokerage use.")

;; Definition of CheckingAccount

(subclass CheckingAccount DepositAccount)
(documentation CheckingAccount "A bank account against which the depositor can draw checks")

(=>
	(and
		(instance ?Account CheckingAccount)
		(instance ?Transaction FinancialTransaction)
		(origin ?Transaction ?Account))
	(exists (?Check)
		(and
			(instance ?Check Check)
			(instrument ?Transaction ?Check))))

;; definition of AuthorizationOfTransaction

(subclass AuthorizationOfTransaction FinancialService)
(subclass AuthorizationOfTransaction RegulatoryProcess)
(documentation AuthorizationOfTransaction "An activity which approves or
disapproves a transaction.")

(=>
	(and
		(instance ?Authorization AuthorizationOfTransaction)
		(patient ?Authorization ?Account)
		(financialAccount ?Account ?Bank))
	(agent ?Authorization ?Bank))

(=>
	(and
		(financialAccount ?Account ?Organization)
		(instance ?Transaction FinancialTransaction)
		(origin ?Transaction ?Account))
	(exists (?Authorization)
		(and
			(instance ?Authorization AuthorizationOfTransaction)
			(subProcess ?Authorization ?Transaction))))

;; definition of Deposit

(subclass Deposit FinancialTransaction)
(disjoint Deposit Withdrawal)
(documentation Deposit "An Activity of money being transferred into a customer's
account at a financial institution.")

(=>
	(instance ?Deposit Deposit)
	(exists (?Account)
            (and
                  (instance ?Account FinancialAccount)
		      (destination ?Deposit ?Account))))

(=>
	(and
		(instance ?Deposit Deposit)
		(time ?Deposit ?TimeOfDeposit)
		(instance ?Account FinancialAccount)
		(destination ?Deposit ?Account)
		(transactionAmount ?Deposit ?Amount)
		(currentAccountBalance ?Account (ImmediatePastFn (WhenFn ?Deposit)) ?Balance1)
		(equal ?Balance2 (AdditionFn ?Balance1 ?Amount)))
	(currentAccountBalance ?Account (ImmediateFutureFn (FutureFn ?Deposit)) ?Balance2))

;; definition of Withdrawal

(subclass Withdrawal FinancialTransaction)
(documentation Withdrawal "An activity of money being transferred from a customer's
account at a financial institution.")

(=>
	(instance ?Withdrawal Withdrawal)
	(exists (?Account)
		(and
			(instance ?Account FinancialAccount)
			(origin ?Withdrawal ?Account))))

(=>
	(and
		(instance ?Withdrawal Withdrawal)
		(time ?Withdrawal ?TimeOfWithdrawal)
		(instance ?Account FinancialAccount)
		(origin ?Withdrawal ?Account)
		(transactionAmount ?Withdrawal ?Amount)
		(currentAccountBalance ?Account (ImmediatePastFn (WhenFn ?Withdrawal)) ?Balance1)
		(equal ?Balance2 (SubtractionFn ?Balance1 ?Amount)))
	(currentAccountBalance ?Account (ImmediateFutureFn (FutureFn ?Withdrawal)) ?Balance2))

;; definition of issuedBy

(instance issuedBy BinaryPredicate)
(domain issuedBy 1 FinancialInstrument)
(domain issuedBy 2 CognitiveAgent)
(documentation issuedBy "(&%issuedBy ?Instrument ?Agent) means that a
&%FinancialInstrument ?Instrument is produced and offered by ?Agent.")

;; definition of signedBy

(instance signedBy BinaryPredicate)
(domain signedBy 1 FinancialInstrument)
(domain signedBy 2 CognitiveAgent)
(documentation signedBy "(&%signedBy ?Instrument ?Agent) means that ?Instrument
has been signed by ?Agent.")

(<=>
   (signedBy ?INSTRUMENT ?AGENT)
   (exists (?SIGN)
      (and
         (instance ?SIGN SigningADocument)
         (agent ?SIGN ?AGENT)
         (resource ?SIGN ?INSTRUMENT))))

;; definition of Investing

(subclass Investing FinancialTransaction)
(documentation Investing "An activity of commiting money or capital in order to
gain a financial return.")

(=>
	(and
		(agent ?Purchase ?Buyer)
		(origin ?Purchase ?Seller)
		(patient ?Purchase ?Object)
		(monetaryValue ?Object ?Money))
	(exists (?Payment)
		(and
			(subProcess ?Payment ?Purchase)
			(instance ?Payment Payment)
			(transactionAmount ?Payment ?Money)
			(destination ?Payment ?Seller))))

;; Definition of Bond.

(subclass Bond FinancialInstrument)
(documentation Bond "A debt instrument issued for a period of more than one year with
the purpose of raising capital by borrowing. The Federal government, states, cities,
corporations, and many other types of institutions sell bonds. A bond is generally a
promise to repay the principal along with interest on a specified &%maturityDate.")

(=>
	(instance ?Bond Bond)
	(exists (?Date)
		(maturityDate ?Bond ?Date)))


(=>
	(and
		(instance ?Bond Bond)
		(couponInterest ?Bond ?Interest)
		(possesses ?BondHolder ?Bond))
	(exists (?Period)
		(and
			(periodicPayment (AccountFn ?Bond) ?Interest ?Period)
			(destination ?Interest ?BondHolder))))

;; Definition of couponInterest.

(instance couponInterest BinaryPredicate)
(domain couponInterest 1 Bond)
(domain couponInterest 2 CurrencyMeasure)
(documentation couponInterest "(&%couponInterest ?BOND ?INTEREST) means that ?INTEREST is
the periodic interest payment made to bondholders during the life of the ?BOND.")

;; Definition of maturityDate.

(instance maturityDate BinaryPredicate)
(domain maturityDate 1 FinancialAccount)
(domain  maturityDate  2 Day)
(documentation maturityDate "The date on which the principal amount of the account
becomes due and payable.")

(=>
	(and
		(maturityDate ?Account ?Date)
		(principalAmount ?Account ?Principal))
	(amountDue ?Account ?Principal ?Date))

(<=>
      (exists (?Period)
	   (and
		(agreementPeriod ?Account ?Period)
		(finishes ?End ?Period)))
	(maturityDate ?Account ?End))

;; Definition of principalAmount.

(instance principalAmount BinaryPredicate)
(domain principalAmount 1 FinancialAccount)
(domain principalAmount 2 CurrencyMeasure)
(documentation principalAmount "(&%principalAmount ?ACCOUNT ?BALANCE) means
that ?BALANCE is the amount originally borrowed (excluding interest).")

;; Definition of periodicPayment.

(instance periodicPayment TernaryPredicate)
(domain periodicPayment 1 FinancialAccount)
(domain periodicPayment 2 CurrencyMeasure)
(domain periodicPayment 3 TimeDuration)
(documentation periodicPayment "(&%periodicPayment ?Account ?Amount ?Period) holds if
?Amount is the amount that must be made from the &%FinancialAccount ?Account after every
period of duration ?Period.")

(=>
	(periodicPayment ?Account ?Amount ?Period)
	(exists (?Payment ?Type)
		(and
			(instance ?Payment ?Type)
                  (subclass ?Type Payment)
			(origin ?Payment ?Account)
			(transactionAmount ?Payment ?Amount)
			(frequency ?Type ?Period))))

;; Definition of amountDue.

(instance amountDue TernaryPredicate)
(domain amountDue  1 FinancialAccount)
(domain amountDue 2 CurrencyMeasure)
(domain amountDue 3 TimePosition)
(documentation amountDue "(&%amountDue ?ACCOUNT ?AMOUNT ?DATE) means ?DATE is the
date on which the amount of Money ?AMOUNT of a particular ?ACCOUNT is due and payable")

(=>
	(and
		(amountDue ?Account ?Amount ?DueDate)
		(accountHolder ?Account ?Agent))
	(holdsObligation (exists (?Payment ?Date)
				  (and
					(instance ?Payment Payment)
					(transactionAmount ?Payment ?Amount)
                              (agent ?Payment ?Agent)
					(origin ?Payment ?Account)
					(date ?Payment ?Date)
					(beforeOrEqual (EndFn ?Date) (EndFn ?DueDate)))) ?Agent))

;; definition of securedBy

(subclass Collateral Asset)
(documentation Collateral "An Asset which has been pledged as security for some form of credit.")

(instance securedBy BinaryPredicate)
(domain securedBy 1 FinancialAccount)
(domain securedBy 2 Collateral)
(documentation securedBy "Assets pledged by a borrower to secure a loan or other credit, and subject to seizure in the event of &%FinancialDefault.")


;; ==================
;; Geography Ontology
;; ==================

;; The following content is borrowed from the Geography Ontology.

(subclass Fishing Hunting)
(documentation Fishing "&%Fishing is the class of &%Processes in which
&%Fish are hunted.")

(=>
	(and
		(instance ?FISHING Fishing)
		(patient ?FISHING ?TARGET)
		(instance ?TARGET Animal))
	(instance ?TARGET Fish))

(subclass Hunting Pursuing)
(documentation Hunting "&%Hunting is the class of &%Processes in which
an animal or animals are pursued and sometimes captured and/or killed.")

(=>
	(instance ?HUNT Hunting)
	(exists (?TARGET)
		(and
			(instance ?TARGET Animal)
			(patient ?HUNT ?TARGET))))

(=>
     (and
        (instance ?HUNT Hunting)
        (patient ?HUNT ?PREY))
     (hasPurpose ?HUNT (exists (?PROC)
                          (and
                             (patient ?PROC ?PREY)
                             (or
                                (instance ?PROC Confining)
                                (instance ?PROC Killing))))))

(subclass SquareMeter AreaMeasure)
(instance SquareMeter UnitOfMeasure)
(documentation SquareMeter "&%SquareMeter represents a &%UnitOfMeasure
equal to one square &%Meter.")

(equal (MeasureFn 1 SquareMeter)
	 (PerFn (MeasureFn 1 Meter)(MeasureFn 1 Meter)))

(subclass Earthquake GeologicalProcess)
(documentation Earthquake "&%Earthquake is the class of events in
which the earth shakes while its layers readjust due to tensional
stresses in the surface of the earth.  A single earthquake may consist
of one or more &%EarthTremors.")

(=>
	(instance ?QUAKE Earthquake)
	(exists (?TREMOR)
		(and
			(instance ?TREMOR EarthTremor)
			(subProcess ?TREMOR ?QUAKE))))

(subclass EarthTremor GeologicalProcess)
(documentation EarthTremor "An &%EarthTremor is an individual seismic
event in which the earth shakes due to release of seismic pressures.")

(subclass Planting Putting)
(documentation Planting "&%Planting is the class of processes in
which &%Plants are planted or transplanted, whether as seeds, seedlings,
or mature plants.")

(=>
   (and
      (instance ?PLANT Planting)
      (patient ?PLANT ?OBJ))
   (or
      (instance ?OBJ Plant)
      (instance ?OBJ Seed)
      (instance ?OBJ Spore)))

(instance DocumentFn UnaryFunction)
(domain DocumentFn 1 Proposition)
(rangeSubclass DocumentFn Text)
(documentation DocumentFn "(&%DocumentFn ?PROP) denotes the class
of &%ContentBearingObjects that contain the information ?PROP.")

(=>
	(instance ?TEXT (DocumentFn ?PROP))
	(containsInformation ?TEXT ?PROP))

(subclass SigningADocument Committing)
(documentation SigningADocument "&%SigningADocument is the class of
actions in which an agent affixes a signature, stamp, or other evidence
of authorization or attestation to a document.  The document and signature
may be electronic.  Signings count as &%SocialInteractions even if done in
private, because their significance derives from a social context.")

(=>
   (and
	(instance ?SIGN SigningADocument)
      (agent ?SIGN ?AGENT)
      (result ?SIGN ?SIGNATURE)
      (resource ?SIGN ?TEXT))
   (exists (?NAME)
      (and
         (names ?NAME ?AGENT)
         (refers ?SIGNATURE ?NAME)
         (instance ?TEXT Text))))

(subclass Star AstronomicalBody)
(documentation Star "&%Star is the class of hot gaseous astronomical bodies.")

(instance Sol Star)
(documentation Sol "&%Sol is the nearest &%Star to &%PlanetEarth and
the focus of its &%SolarSystem.")

(subclass SolarSystem Collection)
(documentation SolarSystem "&%SolarSystem is the class of systems that
consist of a star or stars and any encircling astronomical bodies.")

(subclass Meteoroid AstronomicalBody)
(documentation Meteoroid "Any &%AstronomicalBody that breaks through the
atmosphere of &%Earth.")

(subclass Meteorite Meteoroid)
(documentation Meteorite "Any &%Meteoroid that leaves traces on the surface
of &%Earth.")

(instance orbits BinaryPredicate)
(instance orbits AsymmetricRelation)
(domain orbits 1 Object)
(domain orbits 2 AstronomicalBody)
(documentation orbits "(&%orbits ?SATELLITE ?FOCUS) means that the &%Object
?SATELLITE revolves around the &%AstronomicalBody ?FOCUS.")

(=>
	(instance ?SAT Satellite)
	(exists (?BODY)
		(and
			(instance ?BODY AstronomicalBody)
			(orbits ?SAT ?FOCUS))))

(subclass NaturalSatellite Satellite)
(subclass NaturalSatellite AstronomicalBody)
(disjoint NaturalSatellite ArtificialSatellite)
(documentation NaturalSatellite "&%NaturalSatellite is the class of
large, naturally occurring astronomical bodies orbiting some other
&%AstronomicalBody.")

(subclass Moon NaturalSatellite)
(documentation Moon "&%Moon is the class of &%NaturalSatellites that
orbit planets or large asteroids.")

(subclass Planet NaturalSatellite)
(documentation Planet "&%Planet is the class of large &%NaturalSatellites
that revolve around a star.")

(=>
	(instance ?AREA GeographicArea)
	(geographicSubregion ?AREA PlanetEarth))

(subclass WeatherFront WeatherProcess)
(documentation WeatherFront "&%WeatherFront is the class of weather
processes that are involve relationships between two air masses, such
as a high pressure weather system or a low pressure system.")

(=>
   (instance ?WEATHER WeatherFront)
   (exists (?FRONT)
      (and
         (instance ?FRONT StormFront)
         (located ?WEATHER ?FRONT))))

(instance barometricPressure BinaryPredicate)
(instance barometricPressure AsymmetricRelation)
(subrelation barometricPressure measure)
(domain barometricPressure 1 Object)
(domain barometricPressure 2 PressureMeasure)
(documentation barometricPressure "(&%barometricPressure ?AREA ?PRESSURE)
means that the atmospheric pressure measured at ?AREA is ?PRESSURE.
Barometric pressure is typically expressed in units of &%InchMercury or
&%MmMercury.  For example, standard sea level pressure is 29.92 inches
(760 mm) of mercury: (&%barometricPressure &%SeaLevel (&%MeasureFn 29.92
&%InchMercury)).")

(subclass PressureMeasure ConstantQuantity)
(documentation PressureMeasure "&%PressureMeasure is the class
of &%UnitsOfMeasure used to measure pressure (&%barometricPressure),
e.g., &%InchMercury.")

(subclass InchMercury PressureMeasure)
(instance InchMercury UnitOfMeasure)
(documentation InchMercury "&%InchMercury is a &%UnitOfMeasure
for &%barometricPressure.  It is used to express the number of
inches of mercury supported in a mercurial barometer by the
surrounding air pressure.")

(subclass MmMercury PressureMeasure)
(instance MmMercury UnitOfMeasure)
(documentation MmMercury "&%MmMercury is a &%UnitOfMeasure
for &%barometricPressure.  It is used to express the number
of millimeters of mercury supported in a mercurial barometer
 by the surrounding air pressure.")

(subclass Atmosphere Region)
(subclass Atmosphere (ExtensionFn Gas))
(documentation Atmosphere "&%Atmosphere is a mixture of gases
surrounding any celestial object that has a gravitational field
strong enough to prevent the gases from escaping.")

(=>
	(instance ?AIR Atmosphere)
	(exists (?BODY)
		(and
			(instance ?BODY AstronomicalBody)
			(meetsSpatially ?AIR ?BODY))))

(instance EarthsAtmosphere Atmosphere)
(documentation EarthsAtmosphere "The envelope of air surrounding the Earth, extending about 100 miles and thinning gradually outward.")

(subclass AtmosphericRegion GeographicArea)
(documentation AtmosphericRegion "&%AtmosphericRegion is the class of
all subregions of &%EarthsAtmosphere.")

(=>
	(instance ?AIRSPACE AtmosphericRegion)
	(part ?AIRSPACE EarthsAtmosphere))

(subclass FlowRegion SelfConnectedObject)
(subclass FlowRegion (ExtensionFn Fluid))
(documentation FlowRegion "&%FlowRegion is a class of things whose
boundaries are relatively stable but whose constitutive &%material is
continuously moving through the region itself and being replaced by
other, similar material.  Each &%FlowRegion is constituted by a stream
of matter moving as a whole.  A &%FlowRegion may be liquid or gaseous.
A wind may be considered as a &%Process or as a &%FlowRegion, similarly
an ocean current or a &%WaterWave.  Note that certain
properties belong to the &%FlowRegion itself (e.g., mass, length, volume,
temperature, and speed or velocity of the region moving as a whole),
while other properties of interest belong to the &%Motion of its
constitutive stuff (e.g., velocity, direction).  The motion of
a &%FlowRegion as a whole (e.g. the jet stream moves within the atmosphere)
is distinguished from the motion of the &%pieces of stuff constituting the
&%FlowRegion.")

(=>
	(instance ?FLUID FlowRegion)
	(attribute ?FLUID Fluid))

(subclass AirStream FlowRegion)
(subclass AirStream Air)
(documentation AirStream "&%AirStream is the class of &%FlowRegions that
consist of air.")

(subclass Falling Translocation)
(subclass Falling MotionDownward)
(documentation Falling "&%Falling is the class of events in
which something moves from a higher location to a lower location
under the force of gravity.")

(=>
	(and
		(instance ?DROP Falling)
		(origin ?DROP ?START)
		(destination ?DROP ?FINISH))
	(orientation ?FINISH ?START Below))

(subclass Raining Precipitation)
(documentation Raining "&%Raining is a precipitation process
in which water falls in a &%Liquid state.")

(=>
	(instance ?PROCESS Raining)
	(attribute ?PROCESS Liquid))

(subclass Snowing Precipitation)
(documentation Snowing "&%Snowing is a precipitation process
in which water falls in a &%Solid state.")

(=>
	(instance ?PROCESS Snowing)
	(attribute ?PROCESS Solid))

(subclass BotanicalTree FloweringPlant)
(documentation BotanicalTree "&%BotanicalTree is an imprecise term
for a perennial woody plant that is larger than a bush or shrub,
generally understood to describe a large growth having one main trunk
with few or no branches projecting from its base, a well-developed crown
of foliage, and a height at maturity of at least 12 feet.")

(=>
   (instance ?TREE BotanicalTree)
   (exists (?WOOD)
      (and
         (instance ?WOOD Wood)
         (part ?WOOD ?TREE))))

(subclass Shrub FloweringPlant)
(documentation Shrub "&%Shrub is the class of low, perennial,
typically multi-stemmed woody plants, called shrubs or bushes.")

(=>
	(and
		(instance ?TREE BotanicalTree)
		(instance ?BUSH Shrub)
		(height ?TREE ?TALL)
		(height ?BUSH ?SHORT))
	(greaterThan ?TALL ?SHORT))

(subclass Forest LandArea)
(disjoint Forest Field)
(documentation Forest "&%Forest is the class of large &%LandAreas that
are covered by trees and associated undergrowth, either growing wild or
managed for the purpose of timber production.")

(=>
   (instance ?WOODS Forest)
   (exists (?TREE)
      (and
         (instance ?TREE BotanicalTree)
         (located ?TREE ?WOODS))))

(subclass Agriculture Maintaining)
(documentation Agriculture "&%Agriculture is a class of &%Processes
in which land, plants, or animals are cultivated in order to produce
food or other organic products.")

(=>
	(instance ?AGRO Agriculture)
	(exists (?GROWTH)
		(and
			(instance ?GROWTH Growth)
			(subProcess ?GROWTH ?AGRO))))

(subclass Inlet BodyOfWater)
(documentation Inlet "&%Inlet is the class of bays or other recesses
into the shore of a lake, sea, or river; includes narrow inlets, which
are passages leading from open water through some barrier to a bay or
lagoon.")

(=>
	(instance ?INLET Inlet)
	(exists (?LAND)
		(and
			(instance ?LAND LandArea)
			(penetrates ?INLET ?LAND))))

(=>
	(instance ?INLET Inlet)
	(exists (?WATER)
		(and
			(instance ?WATER WaterArea)
			(connected ?INLET ?WATER))))

(=>
	(and
		(instance ?INLET Inlet)
		(meetsSpatially ?INLET ?WATER)
		(instance ?WATER SaltWaterArea))
	(instance ?INLET SaltWaterArea))

(=>
	(and
		(instance ?INLET Inlet)
		(meetsSpatially ?INLET ?WATER)
		(instance ?WATER FreshWaterArea))
	(instance ?INLET FreshWaterArea))

(subclass BodyOfWater WaterArea)
(subclass BodyOfWater SelfConnectedObject)
(documentation BodyOfWater "A &%BodyOfWater is a connected body of
water with established boundaries marked by either geographical features
or conventional borders.")

(subclass River BodyOfWater)
(subclass River StreamWaterArea)
(subclass River FreshWaterArea)
(documentation River "&%River is the class of large streams of fresh
water flowing through land into a lake, ocean, or other body of water.")

(instance WorldOcean SaltWaterArea)
(instance WorldOcean BodyOfWater)
(documentation WorldOcean "The &%WorldOcean is the collective mass of
sea water that covers 70% of the surface of &%PlanetEarth, surrounding
all of its dry land areas.  Earth's individual &%Oceans are parts of
the &%WorldOcean.")

(=>
	(instance ?AREA Continent)
	(meetsSpatially ?AREA WorldOcean))

(subclass Ocean SaltWaterArea)
(subclass Ocean BodyOfWater)
(documentation Ocean "&%Ocean is the class containing the oceans
that are the major subdivisions of the &%WorldOcean.  According to
the International Hydrographic Association, there are five oceans:
the &%AtlanticOcean, &%PacificOcean, &%IndianOcean, &%SouthernOcean,
and &%ArcticOcean.  Note: The largest oceans, the Atlantic and Pacific,
are subdivided into Northern and Southern regions, but those regions
are not separate &%Oceans.")

(=>
	(and
		(instance ?WATER BodyOfWater)
		(not (instance ?WATER Ocean))
		(instance ?OCEAN Ocean))
	(larger ?OCEAN ?water))

(=>
	(instance ?OCEAN Ocean)
	(properPart ?OCEAN WorldOcean))

(instance AtlanticOcean Ocean)
(documentation AtlanticOcean "&%AtlanticOcean represents the Atlantic
Ocean.")

(instance PacificOcean Ocean)
(documentation PacificOcean "&%PacificOcean represents the Pacific
Ocean.")

(subclass LandForm LandArea)
(documentation LandForm "A &%LandForm is the class of geographically and/or
geologically distinct areas that occur on Earth's surface, including mountains,
hills, plains, valleys, deltas, and features of submerged land areas such as
the ocean floor.")

(subclass SlopedArea LandForm)
(documentation SlopedArea "A &%SlopedArea is a land surface which lies at an
angle to the horizontal so that some points on it are higher than others; a
slope.")

(=>
	(instance ?incline SlopedArea)
	(exists (?top ?bottom ?height1 ?height2)
		(and
			(top ?top ?incline)
			(bottom ?bottom ?incline)
			(altitude ?top ?height1)
			(altitude ?bottom ?height2)
			(successorAttributeClosure ?height2 ?height1) ; needed?
			(greaterThan ?height1 ?height2))))

(subclass Soil Mixture)
(documentation Soil "&%Soil is a substance composed of fine rock material
disintegrated by geological processes, mixed with humus, the organic remains
of decomposed vegetation.")

(=>
	(instance ?Soil Soil)
	(exists (?Humus ?Mineral)
		(and
			(instance ?Humus Humus)
			(instance ?Mineral Mineral)
			(part ?Humus ?Soil)
			(part ?Mineral ?Soil))))

(subclass Humus Mixture)
(documentation Humus "&%Humus is decaying organic matter found in &%Soil and derived
from dead animal and plant material.")

(=>
	(instance ?Humus Humus)
	(exists (?Soil)
		(and
			(instance ?Soil Soil)
			(part ?Humus ?Soil))))

(subclass Clay Soil)
(documentation Clay "Fine-grained soil consisting of mineral particles, not
necessarily clay minerals, that are less than 0.002 mm in their maximum dimension.")

(=>
	(and
		(part ?Particle ?Soil)
		(instance ?Soil Clay)
		(diameter ?Particle (MeasureFn ?Size Centimeter)))
	(greaterThan 0.0002 ?Size))

(subclass Sand Soil)
(documentation Sand "&%Sand is loose fragments of minerals or rocks. Smaller than gravel and larger than silt and clay, sand particles range from 8/10,000 to 8/100 inch (0.02 to 2 millimeters) in diameter. &%Sand is formed by the &%Erosion of rocks through the action of water, ice, or air.")

(<=>
   (instance ?CONTINENT Continent)
   (or
      (equal Africa ?CONTINENT)
      (equal NorthAmerica ?CONTINENT)
      (equal SouthAmerica ?CONTINENT)
      (equal Antarctica ?CONTINENT)
      (equal Europe ?CONTINENT)
      (equal Asia ?CONTINENT)
      (equal Oceania ?CONTINENT)))

(instance Africa Continent)
(documentation Africa "From Mid-Level Ontology used for Ontolog.")

(instance NorthAmerica Continent)
(documentation NorthAmerica "From Mid-Level Ontology used for Ontolog.")

(instance SouthAmerica Continent)
(documentation SouthAmerica "From Mid-Level Ontology used for Ontolog.")

(instance Antarctica Continent)
(documentation Antarctica "From Mid-Level Ontology used for Ontolog.")

(instance Europe Continent)
(documentation Europe "From Mid-Level Ontology used for Ontolog.")

(instance Asia Continent)
(documentation Asia "From Mid-Level Ontology used for Ontolog.")

(instance Oceania Continent)
(documentation Oceania "From Mid-Level Ontology used for Ontolog.")

(instance ArcticRegion GeographicArea)
(documentation ArcticRegion "The &%ArcticRegion is the region of
&%PlanetEarth that lies north of the Arctic Circle (approximately
66 and one half degrees &%North latitude) or beyond the northern
treeline: 'The Arctic'. See also &%ArcticArea.")


;; ===================
;; Government Ontology
;; ===================

;; The following content is borrowed from the Government Ontology.

(instance dependentGeopoliticalArea AsymmetricRelation)
(instance dependentGeopoliticalArea TransitiveRelation)
(domain dependentGeopoliticalArea 1 GeopoliticalArea)
(domain dependentGeopoliticalArea 2 GeopoliticalArea)
(relatedInternalConcept dependentGeopoliticalArea primaryGeopoliticalSubdivision)
(documentation dependentGeopoliticalArea "(&%dependentGeopoliticalArea
?AREA1 ?AREA2) means that ?AREA1 is a geopolitical possession of the
&%GeopoliticalArea ?AREA2 and is not a &%geopoliticalSubdivision of
?AREA2.  For example, (&%dependentGeopoliticalArea &%Guam &%UnitedStates),
because Guam is a territory of the &%UnitedStates, not one of the fifty
U.S. states.  Contrast &%primaryGeopoliticalSubdivision.")

(=>
	(dependentGeopoliticalArea ?AREA ?COUNTRY)
	(possesses ?COUNTRY ?AREA))

(=>
  	(dependentGeopoliticalArea ?AREA ?COUNTRY)
  	(not
    		(geopoliticalSubdivision ?AREA ?COUNTRY)))

(subclass NationalGovernment Government)
(documentation NationalGovernment "&%NationalGovernment is the class of
national-level governments of &%Nations.")

(instance governmentType BinaryPredicate)
(domain governmentType 1 Agent)
(domain governmentType 2 FormOfGovernment)
(subrelation governmentType attribute)
(documentation governmentType "(&%governmentType ?BODY ?FORM) means that
the &%GeopoliticalArea or &%Organization ?BODY has a government with
characteristic(s) of the type ?FORM.")

(=>
	(governmentType ?AGENT ?TYPE)
	(or
		(instance ?AGENT Organization)
		(instance ?AGENT GeopoliticalArea)))

(=>
	(and
		(instance ?AREA GeopoliticalArea)
		(governmentType ?AREA ?TYPE))
	(attribute (GovernmentFn ?AREA) ?TYPE))

(=>
	(and
		(attribute (GovernmentFn ?AREA) ?TYPE)
		(instance ?TYPE FormOfGovernment))
	(governmentType ?AREA ?TYPE))

(subclass FormOfGovernment PoliticoEconomicAttribute)
(documentation FormOfGovernment "&%FormOfGovernment is a class of
&%Attributes used to describe the characteristics of a government,
especially a &%NationalGovernment.  The concept &%FormOfGovernment is
interpreted broadly enough to include &%Anarchy and &%Factionalism.")

(instance Monarchy FormOfGovernment)
(contraryAttribute Monarchy Republic)
(contraryAttribute Monarchy Federation)
(documentation Monarchy "&%Monarchy is the attribute of a government
that is ruled by a monarch, which is usually a hereditary role.")

(=>
	(and
		(governmentType ?PLACE ?TYPE)
		(subAttribute ?TYPE Monarchy))
	(exists (?PERSON ?ROLE)
		(and
			(instance ?PERSON Human)
			(chiefOfState ?PLACE ?ROLE ?PERSON)
			(subAttribute ?ROLE Monarch))))

(=>
	(and
		(governmentType ?PLACE AbsoluteMonarchy)
		(instance ?PLACE GeopoliticalArea))
	(leaderPosition ?PLACE Monarch))

(instance HereditaryMonarchy FormOfGovernment)
(subAttribute HereditaryMonarchy Monarchy)
(documentation HereditaryMonarchy "A monarchy in which the position of monarch is inherited.")

(instance AbsoluteMonarchy FormOfGovernment)
(subAttribute AbsoluteMonarchy Monarchy)
(subAttribute AbsoluteMonarchy AuthoritarianRegime)
(documentation AbsoluteMonarchy "A monarchy in which the supreme power is held by the monarch, in contrast to ConstitutionalMonarchy, where the monarch's power is limited.")

(instance Chiefdom FormOfGovernment)
(subAttribute Chiefdom Monarchy)
(documentation Chiefdom "A monarchy in which the monarch is a Chief.")

(instance ConstitutionalMonarchy FormOfGovernment)
(subAttribute ConstitutionalMonarchy Monarchy)
(subAttribute ConstitutionalMonarchy ConstitutionalGovernment)
(documentation ConstitutionalMonarchy "A monarchy in which the power of the monarch is limited by a constitution, written or unwritten. The United Kingdom is an example.")

(instance Republic FormOfGovernment)
(documentation Republic "&%Republic is the attribute of a government
whose power and authority are vested in its members, who elect
representatives to exercise that power.")

(instance FederalRepublic FormOfGovernment)
(subAttribute FederalRepublic Republic)
(subAttribute FederalRepublic FederalGovernment)
(documentation FederalRepublic "From Mid-Level Ontology used in Ontolog.")

(instance FederalDemocraticRepublic FormOfGovernment)
(subAttribute FederalDemocraticRepublic Republic)
(subAttribute FederalDemocraticRepublic FederalGovernment)
(subAttribute FederalDemocraticRepublic Democracy)
(documentation FederalDemocraticRepublic "From Mid-Level Ontology used in Ontolog.")

(instance ParliamentaryGovernment FormOfGovernment)
(documentation ParliamentaryGovernment "&%ParliamentaryGovernment is the
attribute of a government whose chief &%LegislativeOrganization is a
&%Parliament.  A parliamentary government is compatible with various
other government types, including &%Monarchy.")

(=>
	(and
		(governmentType ?PLACE ?TYPE)
		(instance ?PLACE GeopoliticalArea)
		(subAttribute ?TYPE ParliamentaryGovernment))
	(exists (?ORG)
		(and
			(instance ?ORG Parliament)
			(subOrganizations ?ORG (GovernmentFn ?PLACE)))))

(instance ParliamentaryRepublic FormOfGovernment)
(subAttribute ParliamentaryRepublic Republic)
(subAttribute ParliamentaryRepublic ParliamentaryGovernment)
(documentation ParliamentaryRepublic "From Mid-Level Ontology used in Ontolog.")

(instance ParliamentaryDemocracy FormOfGovernment)
(subAttribute ParliamentaryDemocracy ParliamentaryGovernment)
(subAttribute ParliamentaryDemocracy Democracy)
(documentation ParliamentaryDemocracy "From Mid-Level Ontology used in Ontolog.")

(instance ParliamentaryDemocraticRepublic FormOfGovernment)
(subAttribute ParliamentaryDemocraticRepublic Republic)
(subAttribute ParliamentaryDemocraticRepublic Democracy)
(documentation ParliamentaryDemocraticRepublic "From Mid-Level Ontology used in Ontolog.")

(instance FederalParliamentaryDemocracy FormOfGovernment)
(subAttribute FederalParliamentaryDemocracy ParliamentaryGovernment)
(subAttribute FederalParliamentaryDemocracy FederalGovernment)
(subAttribute FederalParliamentaryDemocracy Democracy)
(documentation FederalParliamentaryDemocracy "From Mid-Level Ontology used in Ontolog.")

(instance PresidentialGovernment FormOfGovernment)
(documentation PresidentialGovernment "From Mid-Level Ontology used for Ontolog.")

(instance ConstitutionalDemocracy FormOfGovernment)
(subAttribute ConstitutionalDemocracy ConstitutionalGovernment)
(documentation ConstitutionalDemocracy "From Mid-Level Ontology used for Ontolog.")

(instance ConstitutionalGovernment FormOfGovernment)
(documentation ConstitutionalGovernment "&%ConstitutionalGovernment is
the attribute of a government whose authority and rule are guided by
principles expressed in a written &%Constitution.")

(instance ConstitutionalRepublic FormOfGovernment)
(subAttribute ConstitutionalRepublic Republic)
(subAttribute ConstitutionalRepublic ConstitutionalGovernment)
(documentation ConstitutionalRepublic "From Mid-Level Ontology used for Ontolog.")

(instance ConstitutionalParliamentaryDemocracy FormOfGovernment)
(subAttribute ConstitutionalParliamentaryDemocracy ParliamentaryGovernment)
(subAttribute ConstitutionalParliamentaryDemocracy Democracy)
(subAttribute ConstitutionalParliamentaryDemocracy ConstitutionalDemocracy)
(documentation ConstitutionalParliamentaryDemocracy "From Mid-Level Ontology used for Ontolog.")

(instance ConstitutionalDemocraticRepublic FormOfGovernment)
(subAttribute ConstitutionalDemocraticRepublic Democracy)
(subAttribute ConstitutionalDemocraticRepublic Republic)
(documentation ConstitutionalDemocraticRepublic "From Mid-Level Ontology used for Ontolog.")

(instance FederalGovernment FormOfGovernment)
(contraryAttribute FederalGovernment UnitaryRule)
(contraryAttribute FederalGovernment AuthoritarianRegime)
(documentation FederalGovernment "&%FederalGovernment is the attribute of
a government that is formed by agreement between a collection of political
units that agree to give up some of their power to the central government,
while reserving some powers to themselves.  The government of the
&%UnitedStates is a federal government, in which power is shared between
the states and the central goverment, as set out in the U.S.
Constitution.")

(instance Federation FormOfGovernment)
(subAttribute Federation FederalGovernment)
(documentation Federation "From Mid-Level Ontology used for Ontolog.")

(instance Commonwealth FormOfGovernment)
(documentation Commonwealth "From Mid-Level Ontology used for Ontolog.")

(instance Democracy FormOfGovernment)
(documentation Democracy "&%Democracy is the attribute of a government whose authority and rule are based in the will of the people governed.  The will of the people is usually expressed through &%Elections, direct or indirect.")

(instance MultipartyDemocracy FormOfGovernment)
(subAttribute MultipartyDemocracy Democracy)
(documentation MultipartyDemocracy "From Mid-Level Ontology used for Ontolog.")

(instance TransitionalGovernment FormOfGovernment)
(documentation TransitionalGovernment "&%TransitionalGovernment is the
attribute of a government that is changing from one form of government
to another.  This may be accompanied by social unrest or instability.")

(instance EmergingDemocracy FormOfGovernment)
(subAttribute EmergingDemocracy Democracy)
(subAttribute EmergingDemocracy TransitionalGovernment)
(documentation EmergingDemocracy "From Mid-Level Ontology used for Ontolog.")

(instance Factionalism FormOfGovernment)
(subAttribute Factionalism TransitionalGovernment)
(documentation Factionalism "From Mid-Level Ontology used for Ontolog.")

(instance Anarchy FormOfGovernment)
(documentation Anarchy "From Mid-Level Ontology used for Ontolog.")

(instance AuthoritarianRegime FormOfGovernment)
(contraryAttribute AuthoritarianRegime MultipartyDemocracy)
(documentation AuthoritarianRegime "&%AuthoritarianRegime is the
attribute of a government that rules autocratically, not allowing
opposition.")

(instance Dictatorship FormOfGovernment)
(subAttribute Dictatorship AuthoritarianRegime)
(documentation Dictatorship "From Mid-Level Ontology used for Ontolog.")

(instance MilitaryDictatorship FormOfGovernment)
(subAttribute MilitaryDictatorship Dictatorship)
(documentation MilitaryDictatorship "From Mid-Level Ontology used for Ontolog.")

(=>
	(governmentType ?PLACE MilitaryDictatorship)
	(leaderPosition ?PLACE MilitaryCommander))

(instance CommunistState FormOfGovernment)
(subAttribute CommunistState AuthoritarianRegime)
(documentation CommunistState "From Mid-Level Ontology used for Ontolog.")

(instance AuthoritarianSocialist FormOfGovernment)
(subAttribute AuthoritarianSocialist AuthoritarianRegime)
(documentation AuthoritarianSocialist "From Mid-Level Ontology used for Ontolog.")

(instance TheocraticGovernment FormOfGovernment)
(subAttribute TheocraticGovernment AuthoritarianRegime)
(documentation TheocraticGovernment "&%TheocraticGovernment is the
attribute of a government that bases its authority on &%Religion.")

(=>
	(and
		(governmentType ?AGENT ?TYPE)
		(subAttribute ?TYPE TheocraticGovernment)
		(instance ?AGENT Organization))
	(instance ?AGENT ReligiousOrganization))

(=>
	(and
		(governmentType ?AGENT ?TYPE)
		(subAttribute ?TYPE TheocraticGovernment)
		(instance ?AGENT GeopoliticalArea))
	(instance (GovernmentFn ?AGENT) ReligiousOrganization))

(instance TheocraticRepublic FormOfGovernment)
(subAttribute TheocraticRepublic TheocraticGovernment)
(documentation TheocraticRepublic "From Mid-Level Ontology used for Ontolog.")

(instance EcclesiasticalGovernment FormOfGovernment)
(subAttribute EcclesiasticalGovernment TheocraticGovernment)
(documentation EcclesiasticalGovernment "From Mid-Level Ontology used for Ontolog.")

(instance IslamicGovernment FormOfGovernment)
(subAttribute IslamicGovernment TheocraticGovernment)
(documentation IslamicGovernment "From Mid-Level Ontology used for Ontolog.")

(instance CompactOfFreeAssociationWithUnitedStates FormOfGovernment)
(documentation CompactOfFreeAssociationWithUnitedStates "From Mid-Level Ontology used for Ontolog.")

(instance CompactOfFreeAssociationWithNewZealand FormOfGovernment)
(documentation CompactOfFreeAssociationWithNewZealand "From Mid-Level Ontology used for Ontolog.")

(instance UnitaryRule FormOfGovernment)
(documentation UnitaryRule "&%UnitaryRule is a &%FormOfGovernment in which
the central government controls affairs at all levels, including the local
level.")

(instance capitalCity BinaryPredicate)
(domain capitalCity 1 City)
(domain capitalCity 2 GeopoliticalArea)
(subrelation capitalCity administrativeCenter)
(documentation capitalCity "(&%capitalCity ?CITY ?REGION) means that the
&%City ?CITY is the capital of the &%GeopoliticalArea ?REGION.")

(instance administrativeCenter BinaryPredicate)
(domain administrativeCenter 1 GeopoliticalArea)
(domain administrativeCenter 2 GeopoliticalArea)
(subrelation administrativeCenter geopoliticalSubdivision)
(documentation administrativeCenter "(&%administrativeCenter ?CENTER
?REGION) means that ?CENTER is the &%City (or other area) from which
the larger &%GeopoliticalArea ?REGION is administered.")

(instance primaryGeopoliticalSubdivision BinaryPredicate)
(instance primaryGeopoliticalSubdivision AsymmetricRelation)
(domain primaryGeopoliticalSubdivision 1 GeopoliticalArea)
(domain primaryGeopoliticalSubdivision 2 GeopoliticalArea)
(subrelation primaryGeopoliticalSubdivision geopoliticalSubdivision)
(documentation primaryGeopoliticalSubdivision
"(&%primaryGeopoliticalSubdivision ?AREA ?COUNTRY) means that the
&%GeopoliticalArea ?AREA is one of the first-order administrative
divisions of the &%Nation ?COUNTRY.  For example, in the United States,
any of the fifty states.  This does not include subordinate regions that
have a lesser status, such as British Crown colonies, U.S. territories,
or protectorates.  See &%geopoliticalSubdivision.")

(subclass Holiday TimeInterval)
(documentation Holiday "&%Holiday is the class of time periods that are
observed as holidays in a country, culture, or religion.  Holidays may
recur annually on the same date, or they may be moveable, for example,
Thanksgiving Day falls on the last &%Thursday of each &%November.")

(subclass FixedHoliday Holiday)
(documentation FixedHoliday "&%FixedHoliday is the class of &%Holidays
whose observance is fixed to recurrences of the calendar day that the
holiday commemorates.")

(subclass MoveableHoliday Holiday)
(documentation MoveableHoliday "&%MoveableHoliday is the class of
&%Holidays whose observance is not fixed to recurrences of any particular
calendar day.  For example, Memorial Day is observed on the last &%Monday
of &%May.")

(instance ExecutiveBranchFn UnaryFunction)
(domain ExecutiveBranchFn 1 Agent)
(range ExecutiveBranchFn Organization)
(documentation ExecutiveBranchFn "(&%ExecutiveBranchFn ?ORG) denotes the
executive branch of ?ORG, with all its officials and agencies, considered
as a whole.")

(instance leader BinaryPredicate)
(instance leader AsymmetricRelation)
(instance leader SingleValuedRelation)
(domain leader 1 CognitiveAgent)
(domain leader 2 Agent)
(documentation leader "(&%leader ?ORGANIZATION ?PERSON)
means that the leader of ?ORGANIZATION is ?PERSON.")

(=>
   (and
      (instance ?AREA GeopoliticalArea)
	(leader (GovernmentFn ?AREA) ?PERSON))
   (leader ?AREA ?PERSON))

(=>
   (and
      (instance ?AREA GeopoliticalArea)
	(leader ?AREA ?PERSON))
(leader (GovernmentFn ?AREA) ?PERSON))

(instance leaderPosition BinaryPredicate)
(instance leaderPosition AsymmetricRelation)
(domain leaderPosition 1 Agent)
(domain leaderPosition 2 Position)
(documentation leaderPosition "(&%leaderPosition ?ORG ?ROLE)
means that in the organization ?ORG, the leader is the person
who holds the &%Position ?ROLE in the organization.")

(instance representativeAgentToAgent TernaryPredicate)
(domain representativeAgentToAgent 1 Agent)
(domain representativeAgentToAgent 2 Agent)
(domain representativeAgentToAgent 3 Agent)
(documentation representativeAgentToAgent "(&%representativeAgentToAgent
?SENDER ?REP ?RECEIVER) means that the &%Agent ?SENDER has the &%Agent
?REP as its representative to the &%Agent ?RECEIVER.  ?REP works for ?SENDER
and is not assumed to be an impartial mediator.")

(=>
	(and
		(representativeAgentToAgent ?SENDER ?REP ?RECEIVER)
		(instance ?SENDER Organization)
		(instance ?REP CognitiveAgent))
	(employs ?SENDER ?REP))

(=>
	(and
		(representativeAgentToAgent ?SENDER ?REP ?RECEIVER)
		(instance ?SENDER Nation)
		(instance ?REP CognitiveAgent))
	(employs (GovernmentFn ?SENDER) ?REP))

(instance President Position)
(documentation President "From Mid-Level Ontology used for Ontolog.")

(instance PrimeMinister Position)
(documentation PrimeMinister "From Mid-Level Ontology used for Ontolog.")

(instance VicePresident Position)
(documentation VicePresident "From Mid-Level Ontology used for Ontolog.")

(instance GovernmentDeputy Position)
(documentation GovernmentDeputy "From Mid-Level Ontology used for Ontolog.")

(instance Chairman Position)
(documentation Chairman "From Mid-Level Ontology used for Ontolog.")

(instance ViceChairman Position)
(documentation ViceChairman "From Mid-Level Ontology used for Ontolog.")

(instance MilitaryCommander Position)
(documentation MilitaryCommander "From Mid-Level Ontology used for Ontolog.")

(instance Monarch Position)
(documentation Monarch "From Mid-Level Ontology used for Ontolog.")

(instance Queen Position)
(subAttribute Queen Monarch)
(documentation Queen "From Mid-Level Ontology used for Ontolog.")

(instance King Position)
(subAttribute King Monarch)
(documentation King "From Mid-Level Ontology used for Ontolog.")

(instance chiefOfState TernaryPredicate)
(domain chiefOfState 1 GeopoliticalArea)
(domain chiefOfState 2 Position)
(domain chiefOfState 3 Human)
(documentation chiefOfState "(&%chiefOfState ?POLITY ?ROLE ?PERSON) means
that ?PERSON is the titular leader of the government of the
&%GeopoliticalArea ?POLITY and represents it at official functions.  The
office held by this chief of state is ?ROLE (e.g., President, Queen,
Chairman).  Note: this term is defined as in the CIA World Fact Book.")

(=>
	(chiefOfState ?AREA ?POSITION ?PERSON)
	(occupiesPosition ?PERSON ?POSITION (GovernmentFn ?AREA)))

(=>
	(and
		(chiefOfState ?AREA ?POSITION ?PERSON)
		(instance ?AREA Nation))
	(citizen ?PERSON ?AREA))

(instance headOfGovernment TernaryPredicate)
(domain headOfGovernment 1 GeopoliticalArea)
(domain headOfGovernment 2 Position)
(domain headOfGovernment 3 Human)
(documentation headOfGovernment "(&%headOfGovernment ?POLITY ?ROLE
?PERSON) means that ?PERSON is the top administrative leader of the
&%Government of the &%GeopoliticalArea ?POLITY, with authority for
managing its day-to-day functions.  The office held by this person
is the &%Position ?ROLE (e.g., President, Prime Minister, Governor).
Note: this term is defined as in the CIA World Fact Book.")

(=>
	(and
		(headOfGovernment ?AREA ?POSITION ?PERSON)
		(instance ?AREA Nation))
	(citizen ?PERSON ?AREA))

(=>
	(headOfGovernment ?AREA ?POSITION ?PERSON)
	(occupiesPosition ?PERSON ?POSITION (GovernmentFn ?AREA)))

(instance electionForPosition BinaryPredicate)
(domain electionForPosition 1 Election)
(domain electionForPosition 2 SocialRole)
(documentation electionForPosition "(&%electionForPosition ?ELECTION
?POSITION) means that in the &%Election ?ELECTION, candidates run for
election to the role(s) ?POSITION.")

(=>
	(electionForPosition ?ELECTION ?ROLE)
	(exists (?CANDIDATE)
		(and
			(instance ?CANDIDATE Human)
			(candidateForPosition ?ELECTION ?ROLE ?CANDIDATE))))

(instance candidateForPosition TernaryPredicate)
(domain candidateForPosition 1 Election)
(domain candidateForPosition 2 SocialRole)
(domain candidateForPosition 3 Agent)
(documentation candidateForPosition "(&%candidateForPosition ?ELECTION
?POSITION ?CONTENDER) means that in the &%Election ?ELECTION for
?POSITION, the &%Agent ?CONTENDER was one of the candidates.")

(=>
	(candidateForPosition ?ELECTION ?POSITION ?CONTENDER)
	(electionForPosition ?ELECTION ?POSITION))

(=>
	(and
		(candidateForPosition ?ELECTION ?POSITION ?CONTENDER)
		(agent ?ELECTION ?AGENT))
	(desires ?CONTENDER (occupiesPosition ?CONTENDER ?POSITION ?AGENT)))

(instance voteFractionReceived QuaternaryPredicate)
(domain voteFractionReceived 1 Election)
(domain voteFractionReceived 2 SocialRole)
(domain voteFractionReceived 3 Agent)
(domain voteFractionReceived 4 RealNumber)
(documentation voteFractionReceived "(&%voteFractionReceived ?ELECTION
?POSITION ?CONTENDER ?FRACTION) means that in the &%Election ?ELECTION for
?POSITION, the &%Agent ?CONTENDER received ?FRACTION of the votes cast.
Contenders may be either persons or political parties.")

(=>
	(voteFractionReceived ?ELECTION ?POSITION ?CONTENDER ?FRACTION)
	(candidateForPosition ?ELECTION ?POSITION ?CONTENDER))

(instance electionWinner TernaryPredicate)
(domain electionWinner 1 Election)
(domain electionWinner 2 SocialRole)
(domain electionWinner 3 Agent)
(subrelation electionWinner candidateForPosition)
(documentation electionWinner "(&%electionWinner ?ELECTION ?POSITION
?CONTENDER) means that in the &%Election ?ELECTION, ?POSITION was won by
the &%Agent ?CONTENDER.  Contenders may be either persons or political
parties.")

(=>
   (and
       (instance ?ELECTION PopularElection)
       (electionWinner ?ELECTION ?POSITION ?PERSON1)
       (voteFractionReceived ?ELECTION ?POSITION ?PERSON1 ?NUMBER1))
   (not
       (exists (?PERSON2 ?NUMBER2)
            (and
               (voteFractionReceived ?ELECTION ?POSITION ?PERSON2 ?NUMBER2)
               (not (equal ?PERSON1 ?PERSON2))
               (greaterThanOrEqualTo ?NUMBER2 ?NUMBER1)))))

(=>
   (and
       (instance ?ELECTION PopularElection)
       (electionWinner ?ELECTION ?POSITION ?PERSON1)
       (voteFractionReceived ?ELECTION ?POSITION ?PERSON1 ?NUMBER1)
       (voteFractionReceived ?ELECTION ?POSITION ?PERSON2 ?NUMBER2)
       (not (equal ?PERSON1 ?PERSON2)))
   (greaterThan ?NUMBER1 ?NUMBER2))

(subclass LegislativeOrganization Organization)
(documentation LegislativeOrganization "&%LegislativeOrganization is the
class of &%Organizations that have as their main purpose the passing of
laws or regulations.")

(=>
	(and
		(instance ?ORG LegislativeOrganization)
		(subOrganization ?ORG ?GOV)
		(instance ?GOV GovernmentOrganization))
	(instance ?ORG GovernmentOrganization))

(subclass Parliament LegislativeOrganization)
(documentation Parliament "&%Parliament is the subclass of
&%LegislativeOrganizations similar to that of the United Kingdom.")

(instance LegislatureFn UnaryFunction)
(domain LegislatureFn 1 GeopoliticalArea)
(range LegislatureFn LegislativeOrganization)
(documentation LegislatureFn "(&%LegislatureFn ?AREA) denotes the
legislative branch of the &%GeopoliticalArea ?AREA.")

(instance JudiciaryFn UnaryFunction)
(domain JudiciaryFn 1 GeopoliticalArea)
(range JudiciaryFn GovernmentOrganization)
(range JudiciaryFn JudicialOrganization)
(documentation JudiciaryFn "(&%JudiciaryFn ?AREA) denotes the judicial
branch of the &%GeopoliticalArea ?AREA, that is, the
&%JudicialOrganization(s) associated with the government of ?AREA,
considered as a whole.")

(subclass PoliticalParty PoliticalOrganization)
(documentation PoliticalParty "&%PoliticalParty is the class of
&%PoliticalOrganizations that may sponsor candidates for &%Elections.")

(=>
   (instance ?PARTY PoliticalParty)
   (hasPurpose ?PARTY (exists (?MEMBER ?GOVERNMENT)
                         (and
                            (instance ?GOVERNMENT Government)
                            (member ?MEMBER ?GOVERNMENT)
                            (member ?MEMBER ?PARTY)))))

(=>
	(and
		(occupiesPosition ?PERSON ?POSITION ?ORGANIZATION)
		(instance ?ORGANIZATION PoliticalParty))
	(member ?PERSON ?ORGANIZATION))

(instance MilitaryGeneral MilitaryOfficer)
(documentation MilitaryGeneral "&%MilitaryGeneral is a generic &%Position
that indicates holding (or having held) the rank of General in some
military force.  An indicator that someone uses the title, without
committing to his or her exact rank or military affiliation.")

;; =======================
;; Transportation Ontology
;; =======================

;; The following content is borrowed from the Transportation Ontology.

(subclass Airport TransitTerminal)
(subclass Airport LandTransitway)
(documentation Airport "&%Airport is the subclass of &%TransitTerminals
for &%Airplanes (fixed-wing &%Aircraft).")

(=>
   (instance ?PORT Airport)
   (exists (?RUNWAY)
      (and
         (instance ?RUNWAY Runway)
         (part ?RUNWAY ?PORT))))

(subclass Runway LandTransitway)
(documentation Runway "&%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.")

(subclass Pipeline Transitway)
(documentation Pipeline "&%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 Waterway Transitway)
(subclass Waterway WaterArea)
(documentation Waterway "&%Waterway is the class of navigable waters,
including oceans, seaLanes, rivers, canals, lakes, and inland bodies
of water.")

(subclass Canal Waterway)
(subclass Canal StationaryArtifact)
(documentation Canal "&%Canal is the subclass of &%Waterways that are
&%Artifacts constructed for the passage of &%Ships.")

(subclass SurfacedRoadway Roadway)
(disjoint SurfacedRoadway UnsurfacedRoadway)
(documentation SurfacedRoadway "&%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 Expressway SurfacedRoadway)
(documentation Expressway "&%Expressway is the subclass of
&%SurfacedRoadways that are multiple-lane, limited-access highways
designed for rapid travel by &%MotorVehicles.")

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

(subclass Railway LandTransitway)
(subclass Railway StationaryArtifact)
(documentation Railway "&%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 Bridge LandTransitway)
(subclass Bridge StationaryArtifact)
(documentation Bridge "&%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 Tunnel LandTransitway)
(subclass Tunnel StationaryArtifact)
(documentation Tunnel "&%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 RailroadTrack StationaryArtifact)
(documentation RailroadTrack "&%RailroadTrack is the class of
&%StationaryArtifacts consisting of rails laid on supports to form
a track for railway vehicles.")

(subclass LandVehicle Vehicle)
(documentation LandVehicle "&%LandVehicle is the class of &%Vehicles that
travel on land.  The two main types of &%LandVehicle are &%RoadVehicle and
&%RailVehicle.")

(subclass RoadVehicle LandVehicle)
(documentation RoadVehicle "A LandVehicle which is designed primarily to travel on roads, in contrast to land vehicles like tanks that can travel across country.")

(subclass Automobile RoadVehicle)
(documentation Automobile "A &%RoadVehicle with an internal combustion engine.")

(subclass Truck RoadVehicle)
(documentation Truck "An &%RoadVehicle whose primary purpose is the &%Transportation of entities other than &%Humans.")

(subclass Trailer RoadVehicle)
(documentation Trailer "An unpowered vehicle moved by attaching to the rear of a powered vehicle.")

(subclass UserPoweredDevice Device)
(documentation UserPoweredDevice "A device which moves by application of the muscle power of the user.")

(subclass Cycle LandVehicle)
(subclass Cycle UserPoweredDevice)
(documentation Cycle "A type of land vehicle with wheels ppowered by the user.")

(subclass Bicycle Cycle)
(documentation Bicycle "A type of Cycle having two wheels.")

(subclass Motorcycle RoadVehicle)
(documentation Motorcycle "A powered vehicle similar to a Cycle, but with a motor.")

(subclass RailVehicle LandVehicle)
(documentation RailVehicle "A &%LandVehicle that runs along fixed rails.")

(subclass Wagon LandVehicle)
(documentation Wagon "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 ?WAGON Wagon)
      (instance ?TRANSPORT Transportation)
      (instrument ?TRANSPORT ?WAGON))
   (exists (?POWER)
      (and
         (instance ?TRANSPORT Pulling)
         (agent ?PULL ?POWER)
         (patient ?PULL ?WAGON)
         (or
            (instance ?POWER DomesticAnimal)
            (instance ?POWER Vehicle)))))

(subclass Train RailVehicle)
(documentation Train "&%Train is the subclass of &%Vehicle whose instances
are linked sequences of &%Wagons.")

(=>
   (instance ?TRAIN Train)
   (exists (?WAGON)
      (and
         (instance ?WAGON Wagon)
         (part ?WAGON ?TRAIN))))

(subclass Watercraft Vehicle)
(documentation Watercraft "&%Watercraft is the class of all &%Vehicles
used to travel on or in water.")

(=>
	(and
		(instance ?CRAFT Watercraft)
		(instance ?EVENT Transportation)
		(instrument ?EVENT ?CRAFT))
	(exists (?WATER)
		(and
			(instance ?WATER WaterArea)
			(located ?EVENT ?WATER))))

(=>
	(and
		(subclass ?TYPE Watercraft)
		(instance ?EVENT WaterTransportation)
		(located ?EVENT ?PLACE))
	(instance ?PLACE WaterArea))

(subclass CubicFoot VolumeMeasure)
(instance CubicFoot UnitOfMeasure)
(documentation CubicFoot "&%CubicFoot is a unit for measuring volume,
equal to a volume of one foot length in each dimension of length, width,
and height.")

(equal (MeasureFn 1 CubitFoot)
	 (MultiplicationFn (MeasureFn 1 Foot)
				 (MultiplicationFn (MeasureFn 1 Foot) (MeasureFn 1 Foot))))

(subclass Aircraft Vehicle)
(partition Aircraft FixedWingAircraft Helicopter)
(documentation Aircraft "Any &%Vehicle which is capable of
&%AirTransportation.  Note that this class covers both fixed-wing aircraft
and helicopters.")

(subclass FixedWingAircraft Aircraft)
(documentation FixedWingAircraft "A heavier-than-air aricraft whose wings do not rotate in order to provide lift.")

(subclass Airplane Aircraft)
(documentation Airplane "&%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 TransitTerminal StationaryArtifact)
(documentation TransitTerminal "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,
&%Vehicles may be received, assigned, sent out, or
stored.")

(subclass TrainStation TransitTerminal)
(documentation TrainStation "A TransitTerminal where trains may stop to pick up or discharge passengers or cargo.")

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

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

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


;; =======================
;; Communications Ontology
;; =======================

;; The following content is borrowed from the Communications Ontology.

(subclass CommunicationDevice EngineeringComponent)
(relatedInternalConcept CommunicationDevice Communication)
(documentation CommunicationDevice "A &%CommunicationDevice is a &%Device
which serves at the &%instrument in a &%Communication &%Process by allowing
the communicated message to be conveyed between the participants.")

(=>
	(instance ?DEVICE CommunicationDevice)
	(capability Communication instrument ?DEVICE))

(=>
   (instance ?DEVICE CommunicationDevice)
   (hasPurpose ?DEVICE (exists (?COMMUNICATION)
                           (and
                               (instance ?COMMUNICATION Communication)
                               (instrument ?COMMUNICATION ?DEVICE)))))

(subclass Satellite Object)
(partition Satellite NaturalSatellite ArtificialSatellite)
(documentation Satellite "&%Satellite is the collection of bodies that
revolve around some  astronomical body, e.g., planets around a star.")

(subclass ArtificialSatellite Satellite)
(subclass ArtificialSatellite Device)
(documentation ArtificialSatellite "An &%ArtificialSatellite is a &%Device
that orbits the earth in space and performs various functions such as
aiding in communication, photographing the earth's surface, and others.  A Satellite that is an artifact; a solid object created by humans orbiting an astronomical body.")

(subclass BroadcastingStation StationaryArtifact)
(partition BroadcastingStation RadioStation TelevisionStation)
(documentation BroadcastingStation "A &%BroadcastingStation is
a &%TelevisionStation or a &%RadioStation.")

(subclass RadioStation BroadcastingStation)
(documentation RadioStation "A &%RadioStation is a &%BroadcastingStation
that broadcasts programs that are intended to be received by &%Radios.")

(subclass Radio CommunicationDevice)
(subclass Radio ElectricDevice)
(documentation Radio "A &%Radio is a &%Device for receiving radio
broadcast signals from a &%RadioStation.")

(subclass TelevisionStation BroadcastingStation)
(documentation TelevisionStation "A &%TelevisionStation is a
&%BroadcastingStation that broadcasts programs that are intended to be
received by &%Television.")

(subclass Television CommunicationDevice)
(subclass Television ElectricDevice)
(documentation Television "A &%Television is a &%Device for receiving
television broadcast signals from a &%TelevisionStation.")


;; ================
;; Economy Ontology
;; ================

;; The following content is borrowed from the Economy Ontology.


(instance economyType BinaryPredicate)
(domain economyType 1 Agent)
(domain economyType 2 EconomicAttribute)
(subrelation economyType attribute)
(documentation economyType "(&%economyType ?POLITY ?TYPE) means that the
&%GeopoliticalArea ?POLITY has an economic system of &%TYPE.")

(=>
	(economyType ?AGENT ?ATTRIBUTE)
	(or
		(instance ?AGENT GeopoliticalArea)
		(instance ?AGENT Organization)))

(subclass EconomicAttribute PoliticoEconomicAttribute)
(documentation EconomicAttribute "&%EconomicAttribute is the class
of terms including all &%Attributes used to characterize the
economic systems or development levels of &%Nations or dependent
&%GeopoliticalAreas.")

(subclass EconomicSystemAttribute EconomicAttribute)
(documentation EconomicSystemAttribute "&%EconomicSystemAttribute
is the class of &%Attributes that describe the type of economic
system that a country or area has.  For example, &%CapitalistEconomy
or &%SocialistEconomy.")

(instance CapitalistEconomy EconomicSystemAttribute)
(subAttribute CapitalistEconomy PrivateEnterpriseEconomy)
(documentation CapitalistEconomy "&%CapitalistEconomy is the
&%Attribute used to characterize a country whose economy is based
on private ownership of the means of production and distribution,
and on private accumulation of capital.")

(instance PureCapitalistEconomy EconomicSystemAttribute)
(subAttribute PureCapitalistEconomy CapitalistEconomy)
(contraryAttribute PureCapitalistEconomy MixedEconomy)
(documentation PureCapitalistEconomy "&%PureCapitalistEconomy is an
&%Attribute representing a capitalist economy that has no admixture of
socialism.")

(instance PrivateEnterpriseEconomy EconomicSystemAttribute)
(subAttribute PrivateEnterpriseEconomy CapitalistEconomy)
(documentation PrivateEnterpriseEconomy "&%PrivateEnterpriseEconomy is
the &%Attribute used to characterize a country in which private
enterprise is the main source of economic wealth.")

(instance MarketEconomy EconomicSystemAttribute)
(documentation MarketEconomy "&%MarketEconomy is an &%Attribute that
describes an economy in which market forces, specifically supply and
demand, provide input for privately managed decisions about pricing
and production of goods.")

(instance SocialistEconomy EconomicSystemAttribute)
(documentation SocialistEconomy "&%SocialistEconomy is the &%Attribute
used to characterize a country in which there is government ownership
or direction of the means of production and distribution.")

(instance PureSocialistEconomy EconomicSystemAttribute)
(subAttribute PureSocialistEconomy SocialistEconomy)
(contraryAttribute PureSocialistEconomy MixedEconomy)
(contraryAttribute PureSocialistEconomy PureCapitalistEconomy)
(documentation PureSocialistEconomy "&%PureSocialistEconomy is an
&%Attribute representing a socialist economy that has no admixture of
capitalism.")

(instance DemocraticSocialism EconomicSystemAttribute)
(subAttribute DemocraticSocialism SocialistEconomy)
(documentation DemocraticSocialism "&%DemocraticSocialism is an
&%Attribute that describes a country in which socialism is promoted
by a political party or parties within a democratic government.
Under &%DemocraticSocialism, the government participates in central
planning of the economy and may also manage nationalized industries.")

(=>
	(attribute ?AREA DemocraticSocialism)
	(governmentType ?AREA Democracy))

(instance MarketSocialism EconomicSystemAttribute)
(subAttribute MarketSocialism PartialMarketEconomy)
(documentation MarketSocialism "An attribute of an economic system.")

(instance CommunalLandOwnershipEconomy EconomicSystemAttribute)
(subAttribute CommunalLandOwnershipEconomy SocialistEconomy)
(documentation CommunalLandOwnershipEconomy "An attribute of an economic system.")

(instance MixedEconomy EconomicSystemAttribute)
(documentation MixedEconomy "&%MixedEconomy is the &%Attribute
of a country whose economy has elements of more than one pure
economic system, e.g., a market economy with government welfare
for unemployed workers.  A mixed-economy country may be a
country in transition, as from a prior communist economy to
capitalism, but a mixed economy may also be a stable combination
of different economic approaches in different areas of a national
economy, e.g., nationally managed health care and education systems
in an otherwise private-enterprise economy.")

(instance PartialMarketEconomy EconomicSystemAttribute)
(subAttribute PartialMarketEconomy MixedEconomy)
(documentation PartialMarketEconomy "An attribute of an economic system.")

(instance GovernmentRegulatedEconomy EconomicSystemAttribute)
(documentation GovernmentRegulatedEconomy "&%GovernmentRegulatedEconomy
is an &%Attribute that describes the economy of a country in which the
government determines prices, production, wages, allocation of resources,
or other economic factors.  An economy that is wholly government planned
is a &%CentrallyPlannedEconomy.")

(instance CentrallyPlannedEconomy EconomicSystemAttribute)
(subAttribute CentrallyPlannedEconomy GovernmentRegulatedEconomy)
(documentation CentrallyPlannedEconomy "&%CentrallyPlannedEconomy
is a term used mainly to describe communist or formerly communist
states, many of which are now evolving away from command economies
towards market-oriented systems.  Also known as a 'command economy'.")

(=>
	(and
		(attribute ?AREA CommunistState)
		(instance ?AREA Nation))
	(economyType ?AREA CentrallyPlannedEconomy))

(instance PrivatizingEconomy EconomicSystemAttribute)
(subAttribute PrivatizingEconomy MixedEconomy)
(documentation PrivatizingEconomy "&%PrivatizingEconomy is an
&%Attribute that describes a country in which formerly government-
owned industries are being transferred into private holdings.")

(instance NationalizedIndustryEconomy EconomicSystemAttribute)
(subAttribute NationalizedIndustryEconomy GovernmentRegulatedEconomy)
(documentation NationalizedIndustryEconomy "&%NationalizedIndustryEconomy
is an &%Attribute describing an economy in which the major industries,
such as energy and transportation, are owned by the national government.")

(instance GovernmentSubsidizedEconomy EconomicSystemAttribute)
(documentation GovernmentSubsidizedEconomy "&%GovernmentSubsidizedEconomy
is an &%Attribute describing an economy in which the government provides
subsidies to various industries, workers, or other groups as part of its
economic policy.")

(instance WelfareCapitalism EconomicSystemAttribute)
(subAttribute WelfareCapitalism MixedEconomy)
(subAttribute WelfareCapitalism GovernmentSubsidizedEconomy)
(documentation WelfareCapitalism "&%WelfareCapitalism is an &%Attribute
describing an economy in which the government provides economic subsidies
to unemployed or disabled individuals.")

(subclass IndustryAttribute Attribute)
(documentation IndustryAttribute "The economic sector, in terms of good or services produced.  Used in industryOfArea relation.")

(instance industryOfArea BinaryPredicate)
(domain industryOfArea 1 GeopoliticalArea)
(domain industryOfArea 2 IndustryAttribute)
(documentation industryOfArea "(&%industryOfArea ?AREA ?SECTOR)
means that the &%GeopoliticalArea ?AREA produces goods or services
in the economic area ?SECTOR.")

(instance industryProductType BinaryPredicate)
(domain industryProductType 1 IndustryAttribute)
(domainSubclass industryProductType 2 Object)
(documentation industryProductType
"(&%industryProductType ?INDUSTRY ?TYPE) means that organizations with
the &%IndustryAttribute ?INDUSTRY produce products of the kind ?TYPE.")

(=>
	(and
		(instance ?ORG Organization)
		(attribute ?ORG ?INDUSTRY)
		(industryProductType ?INDUSTRY ?TYPE))
	(exists (?EVENT ?ITEM)
		(and
			(instance ?EVENT Making)
			(instance ?ITEM ?TYPE)
			(agent ?EVENT ?ORG)
			(result ?EVENT ?ITEM))))

(subclass KilowattHour FunctionQuantity)
(instance KilowattHour UnitOfMeasure)
(documentation KilowattHour "&%KilowattHour is a &%UnitOfMeasure for
energy that represents 1000 &%Watts (1 kW) of power expended over one
hour (1 h) of time.  This is the unit commonly used in commercial
power contexts.  It is equivalent to 3,600,000 &%Joules.")

(<=>
	(equal ?AMOUNT (MeasureFn ?NUMBER KilowattHour))
	(equal ?AMOUNT (MeasureFn (MultiplicationFn 3600000 ?NUMBER) Joule)))

(<=>
	(equal ?AMOUNT (MeasureFn ?NUMBER Joule))
	(equal ?AMOUNT (MeasureFn (MultiplicationFn 0.0000002778 ?NUMBER) Kilowatt)))

(subclass Exporting FinancialTransaction)
(documentation Exporting "&%Exporting is the class of actions in
which there is a &%ChangeOfPossession of goods shipped from a
provider in one &%Nation to a destination in another &%Nation.
Typically, there are &%Selling and &%Buying events associated
with an &%Exporting.  Either the seller or the exporting country
may be considered the &%origin of &%Exporting.")

(=>
	(instance ?EXPORT Exporting)
	(exists (?ITEM)
		(and
			(instance ?ITEM Object)
			(patient ?EXPORT ?ITEM))))

(=>
	(and
		(instance ?EXPORT Exporting)
		(patient ?EXPORT ?ITEM)
		(instance ?AREA GeopoliticalArea)
		(origin ?EXPORT ?AREA))
	(holdsDuring (BeginFn (WhenFn ?EXPORT))
		(located ?ITEM ?AREA)))

(=>
	(and
		(instance ?EXPORT Exporting)
		(patient ?EXPORT ?ITEM)
		(instance ?AREA GeopoliticalArea)
		(holdsDuring (BeginFn (WhenFn ?EXPORT))
			(located ?ITEM ?AREA)))
	(holdsDuring (EndFn (WhenFn ?EXPORT))
			(not
				(located ?ITEM ?AREA))))

(=>
	(and
		(instance ?EXPORT Exporting)
		(patient ?EXPORT ?ITEM)
		(instance ?AREA GeopoliticalArea)
		(holdsDuring (BeginFn (WhenFn ?EXPORT))
			(located ?ITEM ?AREA)))
	(exists (?AREA2)
		(and
			(instance ?AREA2 GeopoliticalArea)
			(not (geopoliticalSubdivision ?AREA1 ?AREA2))
			(not (geopoliticalSubdivision ?AREA2 ?AREA1))
			(holdsDuring (EndFn (WhenFn ?EXPORT))
				(located ?ITEM ?AREA2)))))

(=>
	(and
		(instance ?EXPORT Exporting)
		(patient ?EXPORT ?ITEM)
		(instance ?AREA GeopoliticalArea)
		(destination ?EXPORT ?AREA))
	(holdsDuring (EndFn (WhenFn ?EXPORT))
		(located ?ITEM ?AREA)))

(=>
	(and
		(instance ?EXPORT Exporting)
		(patient ?EXPORT ?ITEM)
		(instance ?AREA1 GeopoliticalArea)
		(instance ?AREA2 GeopoliticalArea)
		(holdsDuring (BeginFn (WhenFn ?EXPORT))
			(located ?ITEM ?AREA1))
		(holdsDuring (EndFn (WhenFn ?EXPORT))
			(located ?ITEM ?AREA2)))
	(not (located ?AREA2 ?AREA1)))

(=>
	(and
		(instance ?EXPORT Exporting)
		(patient ?EXPORT ?ITEM)
		(instance ?AREA1 GeopoliticalArea)
		(origin ?EXPORT ?AREA1)
		(instance ?AREA2 GeopoliticalArea)
		(destination ?EXPORT ?AREA2))
	(not (equal ?AREA1 ?AREA2)))

(=>
	(and
		(instance ?EXPORT Exporting)
		(patient ?EXPORT ?ITEM)
		(instance ?AREA1 GeopoliticalArea)
		(origin ?EXPORT ?AREA1)
		(instance ?AREA2 GeopoliticalArea)
		(destination ?EXPORT ?AREA2))
	(not (located ?AREA2 ?AREA1)))

(instance currencyType BinaryPredicate)
(domain currencyType 1 GeopoliticalArea)
(domain currencyType 2 UnitOfMeasure)
(domainSubclass currencyType 2 CurrencyMeasure)
(documentation currencyType "(&%currencyType ?AREA ?UNIT) means
that the official currency used in the &%GeopoliticalArea ?AREA
is the &%UnitOfMeasure ?UNIT.")

(instance fiscalYearPeriod BinaryPredicate)
(domain fiscalYearPeriod 1 Agent)
(domainSubclass fiscalYearPeriod 2 TimeInterval)
(documentation fiscalYearPeriod "The predicate &%fiscalYearPeriod
indicates the period that an &%Agent or &%Organization uses as its
12-month accounting period.  (&%fiscalYearPeriod ?AGENT &%Year) means
that ?AGENT observes its 12-month accounting period during the
regular calendar year (CY), from &%January to &%December.  For
fiscal years with other beginning and ending months (FYs), use
(&%fiscalYearPeriod ?AGENT (&%RecurrentTimeIntervalFn ?STARTMONTH ?ENDMONTH)).
For example, (&%fiscalYearPeriod (&%GovernmentFn &%UnitedStates)
(&%RecurrentTimeIntervalFn &%October &%September)).  For FYs that begin
or end mid-month, days may be specified within &%RecurrentTimeIntervalFn.")

(subclass Narcotic ControlledSubstance)
(documentation Narcotic "&%Narcotic is a subclass of addictive
&%BiologicallyActiveSubstances that have damping effects on the
nervous system and may be fatal in large doses.")

(subclass ControlledSubstance BiologicallyActiveSubstance)
(documentation ControlledSubstance "&%ControlledSubstance is
the subclass of &%BiologicallyActiveSubstances whose distribution
and use is controlled by government regulation.")

(subclass Fodder Food)
(documentation Fodder "&%Fodder is the subclass of &%Food that is intended
for instances of &%DomesticAnimal.")

(subclass Cement Mixture)
(documentation Cement "&%Cement is a subclass of &%Mixture
whose instances may contain various minerals or ores, prepared by
heating and pulverizing, and used in binding &%Concrete or in laying
brick or stone.")

(subclass Concrete Mixture)
(documentation Concrete "&%Concrete is a subclass of &%Mixture
used as building materials.  Concrete is made up of &%Mineral pieces
(sand or gravel) and a &%Cement material used to bind them together.")

(=>
	(instance ?CONCRETE Concrete)
	(exists (?PART)
		(and
			(instance ?PART Mineral)
			(component ?PART ?CONCRETE))))

(=>
	(instance ?CONCRETE Concrete)
	(exists (?PART)
		(and
			(instance ?PART Cement)
			(component ?PART ?CONCRETE))))

(=>
   (instance ?CONCRETE Concrete)
   (hasPurpose ?CONCRETE (exists (?CONSTRUCT)
                            (and
                               (instance ?CONSTRUCT Constructing)
                               (instrument ?CONSTRUCT ?CONCRETE)))))


;; ===============
;; People Ontology
;; ===============

;; The following content is borrowed from the People Ontology.

(instance PopulationFn UnaryFunction)
(domain PopulationFn 1 GeopoliticalArea)
(range PopulationFn Integer)
(documentation PopulationFn "(&%PopulationFn ?AREA) denotes the &%Integer
that represents the count of the number of people inhabiting the
&%GeopoliticalArea ?AREA.  The total population presents one overall
measure of the potential impact of the country on the world and within its
region.")

(equal (PopulationFn ?AREA)
	 (CardinalityFn
		(KappaFn ?PERSON
			(and
				(instance ?PERSON Human)
				(inhabits ?PERSON ?AREA)))))

(instance average BinaryPredicate)
(instance average PartialValuedRelation)
(instance average SingleValuedRelation)
(domain average 1 List)
(domain average 2 RealNumber)
(documentation average "A partial function that relates a &%List to a
&%RealNumber, provided that the &%List only has list elements that are
&%RealNumbers. The &%RealNumber associated with the &%List is equal to the
mathematical average of the &%RealNumbers in the &%List divided by the total
number of list elements.")

;; The &%List in the domain 1 of &%average may only have list elements that
;; are &%RealNumbers.
(=>
	(average ?LIST ?AVERAGE)
        (forall (?LISTITEM)
		(=>
			(inList ?LISTITEM ?LIST)
			(instance ?LISTITEM RealNumber))))

;; Calculation of the average of the elements of the list involves the
;; stipulation of a second list described as a running total of the elements
;; in the original list. The average of the first list is equal to the final
;; element in the running total divided by the number of list elements.
(<=>
	(average ?LIST1 ?AVERAGE)
	(exists (?LIST2)
		(and
			(equal (ListLengthFn ?LIST2) (ListLengthFn ?LIST1))
			(equal (ListOrderFn ?LIST2 1) (ListOrderFn ?LIST1 1))
			(forall (?ITEMFROM2)
				(=>
					(inList ?ITEMFROM2 ?LIST2)
					(exists (?POSITION ?POSITIONMINUSONE ?ITEMFROM1 ?PRIORFROM2)
						(and
							(greaterThan ?POSITION 1)
							(lessThanOrEqualTo ?POSITION (ListLengthFn ?LIST2))
							(equal (ListOrderFn ?LIST2 ?ITEMFROM2) ?POSITION)
							(inList ?ITEMFROM1 ?LIST1)
							(equal ?POSITION (ListOrderFn ?LIST1 ?ITEMFROM1))
							(inList ?PRIORFROM2 ?LIST2)
							(equal ?POSITIONMINUSONE (SubtractionFn ?POSITION 1))
							(equal ?POSITIONMINUSONE (ListOrderFn ?LIST2 ?PRIORFROM2))
							(equal ?ITEMFROM2 (AdditionFn ?ITEMFROM1 ?PRIORFROM2))))))
			(equal ?LASTPLACE (ListLengthFn ?LIST2))
			(equal ?AVERAGE (DivisionFn (ListOrderFn ?LIST2 ?LASTPLACE) ?LASTPLACE)))))

(subclass RacialEthnicGroup EthnicGroup)
(documentation RacialEthnicGroup "A &%RacialEthnicGroup is an
&%EthnicGroup based on common racial background.")

(subclass DeafSignLanguage ManualHumanLanguage)
(documentation DeafSignLanguage "A &%DeafSignLanguage is a
&%ManualHumanLanguage primarily intended for communication between a
deaf individual and a hearing individual or between deaf individuals.")

(subclass CreoleLanguage SpokenHumanLanguage)
(documentation CreoleLanguage "A &%CreoleLanguage is a &%PidginLanguage that
has developed and become the mother tongue for a community of people. This
process is called 'creolization' and results in an expanded vocabulary and
grammar structure that allow for communication as rich and complex as that of
non-creole languages. While pidgins are regarded as reduced languages, creoles
are considered expanded languages. That is, while pidgins develop to enable
communication in relatively isolated domains, creoles allow for a full range
of expressive possibilities on a par with more 'recognized' languages.")

(subclass PidginLanguage SpokenHumanLanguage)
(documentation PidginLanguage "A &%PidginLanguage is not the native language
of anyone but is used as an auxiliary or supplemental language between two
mutually unintelligible speech communities. Pidgins are reduced languages,
characterized by having a limited vocabulary and a simple grammar which serve
to satisfy basic communication needs. Historically these languages have
primarily arisen in trade centers and plantations (with slaves from different
language backgrounds), areas where large groups of people lacking a common
language need to communicate. By definition, a pidgin has no native speakers;
it is always a person's second (or more) language.")

(subclass MixedLanguage SpokenHumanLanguage)
(documentation MixedLanguage "A &%MixedLanguage is a &%SpokenHumanLanguage
that combines grammar and lexical items from two or more languages to create a new language that is essentially a linguistic mixture.")

(subclass LiteracyAttribute TraitAttribute)
(documentation LiteracyAttribute "If an ?INDIVIDUAL has the &%attribute
&%LiteracyAttribute, that ?INDIVIDUAL is able to read and write.")

(<=>
	(attribute ?INDIVIDUAL LiteracyAttribute)
	(and
		(hasSkill Reading ?INDIVIDUAL)
		(hasSkill Writing ?INDIVIDUAL)))

;; <assertion>
;; Real-world assertions about planets

(instance EarthsMoon Moon)
(orbits EarthsMoon PlanetEarth)
(documentation EarthsMoon "The natural moon that orbits planet Earth.")

(instance PlanetEarth Planet)
(orbits PlanetEarth Sol)
(documentation PlanetEarth "The third planet from the sun in the solar system, where humans evolved.")

(instance PlanetMercury Planet)
(orbits PlanetMercury Sol)
(documentation PlanetMercury "The planet clolsest to the sun in the solar system.")

(instance PlanetVenus Planet)
(orbits PlanetVenus Sol)
(documentation PlanetVenus "The second planet from the sun in the solar system.")

(instance PlanetMars Planet)
(orbits PlanetMars Sol)
(documentation PlanetMars "The fourth planet from the sun in the solar system.")

(instance PlanetJupiter Planet)
(orbits PlanetJupiter Sol)
(documentation PlanetJupiter "The fifth planet from the sun in the solar system, the largest planet in the solar system.")

(instance PlanetSaturn Planet)
(orbits PlanetSaturn Sol)
(documentation PlanetSaturn "The sixth planet from the sun in the solar system, with pretty rings around it.")

(instance PlanetNeptune Planet)
(orbits PlanetNeptune Sol)
(documentation PlanetNeptune "The seventh planet from the sun in the solar system.")

(instance PlanetUranus Planet)
(orbits PlanetUranus Sol)
(documentation PlanetUranus "The eighth planet from the sun in the solar system.")

(instance PlanetPluto Planet)
(orbits PlanetPluto Sol)
(documentation PlanetPluto "The ninth planet from the sun in the solar system -- far out!")


;; Real-world assertions about ethnicity and religion

(instance BlackEthnicity RacialEthnicGroup)
(documentation BlackEthnicity "A broad racial division encompassing
various African, African-American, and Caribbean peoples.")

(instance WhiteEthnicity EthnicGroup)
(documentation WhiteEthnicity "A broad ethnic division encompassing
various European, Hispanic, and Middle Eastern peoples. Also known as
Caucasian.")

(instance AmerindianEthnicity EthnicGroup)
(documentation AmerindianEthnicity "A broad ethnic group encompassing any
of the North, Central, or South American tribal peoples.")

(instance Judaism BeliefGroup)
(documentation Judaism "The religion developed among the ancient Hebrews and
characterized by belief in one transcendent God who has revealed Himself to
Abraham, Moses, and the Hebrew prophets and by a religious life in accordance
with Scriptures and rabbinic traditions.")

(instance Christianity BeliefGroup)
(documentation Christianity "The religion derived from Jesus Christ, based on the Bible as sacred scripture, and professed by Eastern, Catholic, and
Protestant bodies, among other subdivisions.")

(instance Protestantism BeliefGroup)
(subCollection Protestantism Christianity)
(documentation Protestantism "&%Protestantism is one of the three major
divisions of &%Christianity.")

(instance RomanCatholicism BeliefGroup)
(subCollection RomanCatholicism Christianity)
(documentation RomanCatholicism "&%RomanCathoicism is one of the three major divisions of &%Christianity.")

(instance RomanCatholicChurch ReligiousOrganization)
(documentation RomanCatholicChurch "The &%RomanCatholicChurch is the
&%ReligiousOrganization that promulgates &%RomanCatholicism.")

;; fields of study

(instance Mathematics FieldOfStudy)
(documentation Mathematics "The &%FieldOfStudy dealing with quantities and their relations to one another.")

(instance Economics SocialScience)
(documentation Economics "The field of economics.")

(instance Linguistics SocialScience)
(documentation Linguistics "The field of linguistics.")

(instance Psychology SocialScience)
(documentation Psychology "The field of psychology.")

(instance Biology Science)
(documentation Biology "The study of the classification, development, and
functioning of &%Organisms.")

(instance Physiology Science)
(subField Physiology Biology)
(documentation Physiology "The part of &%Biology dealing with the functioning of
&%Organisms.")

(instance MedicalScience Science)
(subField MedicalScience Biology)
(documentation MedicalScience "The field of medicine.")

(instance Chemistry Science)
(documentation Chemistry "The study of the compositions, properties, and
reactions of &%Substances.")

(instance Physics Science)
(documentation Physics "The study of matter and energy and their relations.")

(instance Engineering Science)
(documentation Engineering "The application of instances of &%Science to the solution
of practical problems, i.e. the creation of various forms of technology.")

(instance Electronics Science)
(subField Electronics Physics)
(subField Electronics Engineering)
(documentation Electronics "The branch of &%Physics that deals with the theory
and applications of electron emissions.")

(instance Theology FieldOfStudy)
(documentation Theology "The systematic study of religious practice and religious truth.")

(instance MilitaryScience FieldOfStudy)
(documentation MilitaryScience "The study of the principles of war.")

(instance History FieldOfStudy)
(documentation History "The recording and interpretation of past events involving
&%Humans, including political events and cultural practices.")

(instance Philosophy FieldOfStudy)
(documentation Philosophy "The study of first principles, including epistemology,
metaphysics, and ethics.")

(instance FieldOfLaw FieldOfStudy)
(documentation FieldOfLaw "The study of legal principles and the framework of national
and/or international laws.")

;; geography

(instance RedRiver River)
(part RedRiver UnitedStates)
(documentation RedRiver "A tributary of the Mississippi River.")

(instance Mexico Nation)
(meetsSpatially Mexico UnitedStates)
(documentation Mexico "A large Spanish-speaking country that borders on
the &%UnitedStates.")

(instance Laos Nation)
(documentation Laos "A &%Nation in southeastern Asia.")

(instance VirginIslands Collection)
(documentation VirginIslands "A &%Collection of &%Islands in the
West Indies that are dependencies of the &%UnitedStates and the
&%UnitedKingdomOfGreatBritainAndNorthernIreland.")

(=>
   (member ?ISLAND VirginIslands)
   (instance ?ISLAND Island))

(instance Guam Island)
(documentation Guam "An &%Island in the &%PacificOcean that is a
protectorate of the &%UnitedStates.")

(instance Cuba Nation)
(instance Cuba Island)
(documentation Cuba "An &%Island &%Nation in the Carribbean.")

(instance UnitedStates Nation)
(documentation UnitedStates "The North American republic of 50 states.")

(instance Alaska AmericanState)
(documentation Alaska "The largest state in the &%UnitedStates.")

(=>
   (and
      (subclass ?UNIT AreaMeasure)
      (measure Alaska (MeasureFn ?NUMBER1 ?UNIT))
      (measure ?STATE (MeasureFn ?NUMBER2 ?UNIT))
      (instance ?STATE AmericanState)
      (not (equal Alaska ?STATE)))
   (lessThan ?NUMBER2 ?NUMBER1))

(instance California AmericanState)
(documentation California "The &%AmericanState with the highest population.")

(=>
   (and
      (instance ?STATE AmericanState)
      (not (equal ?STATE California)))
   (greaterThan (ResidentFn California) (ResidentFn ?STATE)))

(instance NewYorkState AmericanState)
(documentation NewYorkState "A populous state in the northeastern &%UnitedStates.")

(instance Pennsylvania AmericanState)
(documentation Pennsylvania "A mid-Atlantic &%AmericanState.  Its two major cities
are Philadelphia and Pittsburgh.")

(instance Texas AmericanState)
(documentation Texas "The second largest &%AmericanState, located in the southwest
on the Gulf of Mexico.")

(instance Virginia AmericanState)
(meetsSpatially Virginia WashingtonDC)
(documentation Virginia "A state in the southeastern &%UnitedStates
that borders on &%WashingtonDC.")

(instance Georgia AmericanState)
(documentation Georgia "A state in the southeastern &%UnitedStates.")

(instance NewEngland GeographicArea)
(part NewEngland UnitedStates)
(documentation NewEngland "A &%GeographicArea in the &%UnitedStates that is
made up of the states of Maine, New Hampshire, Vermont, Massachusetts, Rhode Island,
and Connecticut.")

(instance NewYorkCity AmericanCity)
(part NewYorkCity NewYorkState)
(documentation NewYorkCity "The largest city in the &%UnitedStates.
A worldwide center of finance and culture, it is comprised of five boroughs.")

(=>
   (instance ?CITY AmericanCity)
   (lessThanOrEqualTo (CardinalityFn (ResidentFn ?CITY)) (CardinalityFn (ResidentFn NewYorkCity))))

(instance WashingtonDC AmericanCity)
(documentation WashingtonDC "The capital city of the &%UnitedStates.")

(instance Chicago AmericanCity)
(documentation Chicago "Often referred to as the second city, Chicago is
the largest city in the midwestern United States.")

(instance Dallas AmericanCity)
(documentation Dallas "A large &%City in northeastern Texas.")

(instance KansasCityMissouri AmericanCity)
(documentation KansasCityMissouri "A large &%City at the western edge of Missouri.")

(instance Boston AmericanCity)
(documentation Boston "The largest &%City in Massachusetts.")

(instance LosAngeles AmericanCity)
(part LosAngeles California)
(documentation LosAngeles "The largest &%City in &%California.")

(=>
   (and
      (instance ?CITY AmericanCity)
      (part ?CITY California)
      (not (equal ?CITY LosAngeles)))
   (greaterThan (ResidentFn LosAngeles) (ResidentFn ?CITY)))

(instance SanFrancisco AmericanCity)
(part SanFrancisco California)
(documentation SanFrancisco "A large &%City in &%California, located on the
San Francisco Bay.")

(instance ManchesterNewHampshire AmericanCity)
(documentation ManchesterNewHampshire "The largest &%City in New Hampshire.")

(instance PuertoRico Island)
(part PuertoRico UnitedStates)
(documentation PuertoRico "An autonomous part of the &%UnitedStates.")

(instance Europe Continent)
(documentation Europe "The second smallest &%Continent.")

(instance Paris EuropeanCity)
(part Paris France)
(documentation Paris "The capital of &%France and the largest &%City of the country.")

(=>
   (and
      (instance ?CITY City)
      (part ?CITY France))
   (lessThanOrEqualTo (CardinalityFn (ResidentFn ?CITY)) (CardinalityFn (ResidentFn Paris))))

(instance France Nation)
(documentation France "A large, industrialized European &%Nation.")

(instance UnitedKingdomOfGreatBritainAndNorthernIreland Nation)
(documentation UnitedKingdomOfGreatBritainAndNorthernIreland "The &%Nation comprising
England, Scotland, Wales, and Northern Ireland.")

(instance London City)
(part London UnitedKingdomOfGreatBritainAndNorthernIreland)
(documentation London "The capital city and the largest city of the
&%UnitedKingdomOfGreatBritainAndNorthernIreland.")

(instance Ireland Nation)
(documentation Ireland "An independent &%Nation that borders on the Irish Sea.")

(instance SovietUnion Nation)
(documentation SovietUnion "The former communist nation of the Soviet Union.")

(instance Russia Nation)
(documentation Russia "A &%Nation which is currently independent, but which
was once part of the &%SovietUnion.")

(instance Greece Nation)
(part Greece Europe)
(documentation Greece "A small Balkan &%Nation that is known primarily for the
literature, philosophy, and art produced there during the ancient period.")

(instance Germany Nation)
(part Germany Europe)
(documentation Germany "A large European &%Nation.")

(instance Japan Nation)
(instance Japan Island)
(documentation Japan "A large industrialized Asian &%Nation.")

(instance UnitedStatesDepartmentOfState GovernmentOrganization)
(subOrganization UnitedStatesDepartmentOfState (GovernmentFn UnitedStates))
(documentation UnitedStatesDepartmentOfState "The &%subOrganization of the US
government that sets and enforces foreign policy.")

(instance UnitedStatesDepartmentOfInterior GovernmentOrganization)
(subOrganization UnitedStatesDepartmentOfInterior (GovernmentFn UnitedStates))
(documentation UnitedStatesDepartmentOfInterior "Manages and preserves public lands
and natural resources in the &%UnitedStates.")

(instance SecretaryOfTheInterior GovernmentSecretary)
(documentation SecretaryOfTheInterior "The head of the &%UnitedStatesDepartmentOfInterior.")

(=>
   (occupiesPosition ?PERSON SecretaryOfTheInterior UnitedStatesDepartmentOfInterior)
   (leader UnitedStatesDepartmentOfInterior ?PERSON))

(instance SecretaryOfTheTreasury GovernmentSecretary)
(documentation SecretaryOfTheTreasury "The head of the United States Treasury Department.")

(instance UnitedStatesCongress LegislativeOrganization)
(subOrganization UnitedStatesCongress (GovernmentFn UnitedStates))
(documentation UnitedStatesCongress "The legislative branch of the government
of the &%UnitedStates.")

;; </assertion>

;; END FILE


;; <module>Invoices</module>
;;  This module contains a set of propositions that were created as 
;;  part of the  development of an Invoice ontology by the Ontolog 
;;  study group.
;;  Started January 2004.
;;  This is only an initial set of classes, relations, and axioms
;;        for discussion.  
;;  Last edit January 10, 2004
;;  First version craeted by Adam Pease
;;   this version has some modifications by Patrick Cassidy
;;  BEGIN FILE

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;     INVOICES              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; INCLUDES 'BASE ONTOLOGY'
;; INCLUDES 'STRUCTURALONTOLOGY'
;; INCLUDES 'NUMERIC FUNCTIONS'
;; INCLUDES 'SET/CLASS THEORY'
;; INCLUDES 'UNITS OF MEASURE'
;; INCLUDES 'TEMPORAL CONCEPTS'
;; INCLUDES 'MEREOTOPOLOGY'
;; INCLUDES 'PROCESSES'
;; INCLUDES 'OBJECTS'
;; INCLUDES 'QUALITIES'


;; PJC Jan 9, 2004
;; BEGIN Definitions added by PJC to those proposed by Adam Pease
;; *****************************************************

(subclass Statement Proposition)
(documentation Statement "A communication between two agents asserting what the speaker considers as a fact.")

(subclass Tree Plant)
(documentation Tree "A plant having a permanently woody stem or trunk, usually developing branches at a distance from the ground.")

(subclass CommercialItem Product)
(documentation CommercialItem "An article of commerce sold as a unit, corresponding to the 'Item' class used in the UBL specification.  This 
represents a 'package' for sale and may have any number of individual
manufactured objects in it, such as a pair of shoes, a bag of potatoes,
or a kit with several different types of items as components.")

(subclass Wood Substance)
(documentation Wood "Wood is a natural substance obtained by processing trees, typically by removing the outer portions of the trunk or of thick branches.  For commercial purposes Wood may be considered as non-living.  The 'Wood' (woody substance) which may contain living cells in a living tree should therefore be labeled by a different name.")

;; note that the order of the arguments for the
;; hasName relation is the opposite of that for 'name'

(instance hasName BinaryRelation)
(domain hasName 1 Entity)
(domain hasName 2 SymbolicString)
(documentation hasName "hasName relates an instance of an entity to a
string of linguistic characters used to reference the entity in
linguistic communication.  The hasName relation is not a necessary 
relation since not every entity is named by a SymbolicString and not every SymbolicString is the label for an entity.")

;; *****************************************************
;; End definitions added by PJC 

;;  BEGIN Propositions and axioms suggested by Adam Pease.
;;  The order of the propositions has been changed from
;;  the original.
;   Modified Jan. 10, 2004
;; ********************************************

(subclass Invoice Statement)
(documentation Invoice "A document which states that a buyer owes, or does not owe, money for goods or services purchased from a seller.")

(=>
  (instance ?I Invoice)
  (exists (?EV)
    (and
      (instance ?EV Selling)
      (refers ?I ?EV))))

(instance quantityInEvent TernaryRelation)
(domain quantityInEvent 1 Process)
(domain quantityInEvent 2 Integer)
(domainSubclass quantityInEvent 3 Object)
(documentation quantityInEvent "(quantityInEvent ?PROC ?QUANT ?OBJ)
means that the number of &%Objects that are instances of ?OBJ that
participate in an event ?PROC in the role of &%patient is ?QUANT.")

(=>
  (quantityInEvent ?P ?Q ?OBJ)
  (exists (?INST)
    (equal ?Q
      (CardinalityFn
        (KappaFn ?INST
          (and
            (instance ?INST ?OBJ)
            (patient ?P ?INST)))))))


(subclass Softwood Wood)
(documentation Softwood "Wood obtained from trees classified in the family of Softwoods or gymnosperms.  Examples include scrub pine, spruce and cedar.")

(subclass Hardwood Wood)
(disjoint Hardwood Softwood)
(documentation Hardwood "Wood obtained from trees classified in the family of Hardwoods, or angiosperms.  Examples include oak, birch and maple.")

(=>
  (and
    (instance ?H Hardwood)
    (instance ?S Softwood)
    (measure ?H
      (DensityFn ?MASSH ?VOLUME))
    (measure ?S
      (DensityFn ?MASSS ?VOLUME)))
  (greaterThan ?MASSH ?MASSS))


;; <assertion>
;; ------------------------------------------------------
;; Instance level content
;;  The following propositions describe a sample invoice,
;;  referring to a fictional transaction, for illustrative
;;  purposes

;; not yet formalized: Delivery Doc: DEL-03/55-712
;; not yet formalized: Your Order No: S03-034257
;; not yet formalized: Contact: Eva Brick

(instance JoineryInvoice-2003-00645 Invoice)
(hasName  JoineryInvoice-2003-00645 "IN 2003/00645")
(date JoineryInvoice-2003-00645 (DayFn 25 (MonthFn 2 (YearFn 2003))))
(refers JoineryInvoice-2003-00645 JoineryPurchase-2003-00645)
(documentation JoineryInvoice-2003-00645 "This is a sample invoice used for illustrative purposes in development of the Ontology Invoice ontology.  All agents and events are fictional.")

(instance JoineryPurchase-2003-00645 FinancialTransaction)
(date JoineryPurchase-2003-00645 (DayFn 3 (MonthFn 2 (YearFn 2003))))
(quantityInEvent JoineryPurchase-2003-00645 2 JoineryObject-236WV)
(documentation JoineryPurchase-2003-00645 "This is the selling event referred to in the sample invoice JoineryInvoice-2003-00645, used in development of the Ontology Invoice ontology.  This is a fictional event.")

(subclass JoineryObject-236WV Product)
(subclass JoineryObject-236WV Softwood)
(documentation JoineryObject-236WV "This is the class of objects, the sale of certain instances of which is referred to in the sample invoice JoineryInvoice-2003-00645, used in development of the Ontology Invoice ontology.")

;; The Axiom below states that every instance of the class of objects 
;; JoineryObject-236WV has the value GBP 102.5 
;; see PJC note 6 above for an alternative representation

(=>
  (instance ?X JoineryObject-236WV)
  (monetaryValue ?X (MeasureFn 102.50 BritishPound)))

(instance Buying-2003-00645 Buying)
(subProcess Buying-2003-00645 JoineryPurchase-2003-00645)
(agent Buying-2003-00645 JerryBuilderPLC)
(documentation Buying-2003-00645 "The buying aspect of the
commercial transaction JoineryPurchase-2003-00645; the
transaction from the perspective of the buyer JerryBuilderPLC.")

(instance Selling-2003-00645 Selling)
(subProcess Selling-2003-00645 JoineryPurchase-2003-00645)
(agent Selling-2003-00645 SpecialistWindowsPLC)
(documentation Selling-2003-00645 "The selling aspect of the commercial transaction JoineryPurchase-2003-00645; the
transaction from the perspective of the seller SpecialistWindowsPLC.")

(instance JerryBuilderPLC CognitiveAgent)
(hasName  JerryBuilderPLC "Jerry Builder plc")
(address JerryBuilderPLC MarshLane)
(documentation JerryBuilderPLC "The buyer in the
commercial transaction JoineryPurchase-2003-00645.")

(instance SpecialistWindowsPLC CognitiveAgent)
(hasName  SpecialistWindowsPLC "Specialist Windows plc")
(address SpecialistWindowsPLC SnowhillWorks)
(documentation SpecialistWindowsPLC "The seller in the
commercial transaction JoineryPurchase-2003-00645.")

(instance MarshLane Address)
(hasName  MarshLane "Marsh Lane")
(located MarshLane NowhereNorfolk)
(postalCode MarshLane "NR18 4XX")
(documentation MarshLane "The fictional address of the buyer JerryBuilderPLC in the fictional commercial transaction JoineryPurchase-2003-00645.")

(instance NowhereNorfolk City)
(located NowhereNorfolk NorfolkUK)
(documentation NowhereNorfolk "The fictional city where the buyer JerryBuilderPLC in the fictional commercial transaction JoineryPurchase-2003-00645 is located.")
 
(instance NorfolkUK StateOrProvince)
(located NorfolkUK UnitedKingdom)
(documentation NorfolkUK "The fictional state where the buyer JerryBuilderPLC in the fictional commercial transaction JoineryPurchase-2003-00645 is located.")

(instance SnowhillWorks Address)
(hasName  SnowhillWorks "Snowhill Works")
(located SnowhillWorks LittleSnoringWhereshire)
(postalCode SnowhillWorks "SM2 3NW")
(documentation SnowhillWorks "The fictional address where the seller SpecialistWindowsPLC in the fictional commercial transaction JoineryPurchase-2003-00645 is located.")

(instance LittleSnoringWhereshire City)
(located LittleSnoringWhereshire WhereshireUK)
(documentation LittleSnoringWhereshire "The fictional city where the seller SpecialistWindowsPLC in the fictional commercial transaction JoineryPurchase-2003-00645 is located.")

(instance WhereshireUK StateOrProvince)
(located WhereshireUK UnitedKingdom)
(documentation WhereshireUK "The fictional state where the seller SpecialistWindowsPLC in the fictional commercial transaction JoineryPurchase-2003-00645 is located.")

;; </assertion>

;;  End Propositions and axioms suggested by Adam Pease
;; ********************************************

;; END FILE