```;;; -*- Mode:Lisp; Syntax: Common-Lisp; Package:ONTOLINGUA-USER; Base:10 -*-

;;; Physical Components Ontology
;;; (c) 1993 Greg Olsen and Thomas Gruber

(in-package "ONTOLINGUA-USER")

(define-theory MECHANICAL-COMPONENTS (component-assemblies
simple-geometry)
"This theory provides a minimal vocabulary for describing
three-dimensional objects with mass.  It is built on the abstract
notion of components that we get from the component-assemblies theory,
and the elementary geometric primitives from the simple-geometry theory.

In this theory, we say that a MECHANICAL-COMPONENT is a component that has a
REFERENCE-POINT, a REFERENCE-FRAME, and a MASS.  Information about the spatial
extent and relative position of the object can be specified using the
reference frame and point.  The MASS of a mechanical-component is a physical
quantity specified as the value of a unary function.  The INERTIA-TENSOR for
the component is given with a binary relation from the component and its
reference point to an inertia quantity."
:issues ("Copyright (c) 1994 Greg Olsen and Thomas R. Gruber")
)

(in-theory 'mechanical-components)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Physical Components
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define-class MECHANICAL-COMPONENT (?p)
"Mechanical-component is a specialization of COMPONENT
from the component-assemblies theory.  Mechanical components
are three-dimensional objects with an associated reference point
and reference frame.  They also have a slot called MASS
whose value is a scalar-quantity of dimension mass-dimension."

:def (and (component ?p)
(3D-point (REFERENCE-POINT ?p))
(3D-frame (REFERENCE-FRAME ?p))
(scalar-quantity (MASS ?p))

(define-class MECHANICAL-CONNECTION (?c)
"The physical-connection class is a specialization of the connection class
from the component-components theory."

:def (connection ?c))

(define-function REFERENCE-POINT (?comp) :-> ?point
"The reference point of a mechanical-component."
:def (and (mechanical-component ?comp)
(3D-point ?point)))

(define-function REFERENCE-FRAME (?comp) :-> ?frame
"The reference frame of a mechanical-component."
:def (and (mechanical-component ?comp)
(3D-frame ?frame)))

(define-function MASS (?comp) :-> ?m
"The mass of a mechanical-component, which is a scalar
quantity of physical-dimension mass-dimension."
;; This is an attribute
:def (and (mechanical-component ?comp)
(scalar-quantity ?m)
(quantity.dimension ?m mass-dimension)))

(define-function INERTIA-TENSOR (?comp ?pt) :-> ?i
"The inertia tensor of mechanical-component. Relative to a
given point."
:def (and (mechanical-component ?comp)
(3D-point ?pt)
(quantity.dimension
?i
(* mass-dimension
(* length-dimension
length-dimension)))))

(define-function APPLIED-FORCE (?comp1 ?comp2) :-> ?f
"The resultant applied force of comp1 on comp2.  A 3D vector."
:def (and (mechanical-component ?comp1)
(mechanical-component ?comp2)
(3D-vector-quantity ?f)
(quantity.dimension ?f force-dimension)))

(define-function APPLIED-TORQUE (?comp1 ?comp2) :-> ?t
"The resultant applied torque of comp1 on comp2.  A 3D vector."
:def (and (mechanical-component ?comp1)
(mechanical-component ?comp2)
(3D-vector-quantity ?t)
(quantity.dimension ?t (* force-dimension
length-dimension))))

```

This Lisp-to-HTML translation was brought to you by
François Gerbaux and Tom Gruber