;;(C) Copyright IBM Corp. 1992
;; This file is included in the IBM Research Report RT0084,
;; "Task-Specific Language Constructs for Describing Constrints in
;; Job Assignment Probelms" by T.Hama, M.Hori, and Y.Nakamura.
;;
(in-package "ONTOLINGUA-USER")
(define-theory JAT-GENERIC (frame-ontology)
"This theory defines a generic ontology. Concepts in this ontolgy
can be shared in several different tasks. Only temporal concepts are
defined at present.
This theory is based on Ontolingua V 3.0")
(in-theory 'JAT-GENERIC)
;;
;; Definitions of second order classes
;;
(define-class INTEGER-RANGE (?class)
"An integer range is a class of integers specified by lower
and upper bounds. Instances of an integer-range are integers."
:iff-def (and (class ?class)
(subclass-of ?class integer)
(= (value-cardinality ?class I-LOWER-BOUND) 1)
(= (value-cardinality ?class I-UPPER-BOUND) 1)
(forall ?i (=> (instance-of ?i ?class)
(and (=< (i-lower-bound ?class) ?i)
(=< ?i (i-upper-bound ?class)))))))
(define-function I-LOWER-BOUND (?range) :-> ?integer
"(I-LOWER-BOUND r) denotes the integer lower bound of range r."
:def (and (integer-range ?range)
(integer ?integer)))
(define-function I-UPPER-BOUND (?range) :-> ?integer
"(I-UPPER-BOUND r) denotes the integer upper bound of range r."
:def (and (integer-range ?range)
(integer ?integer)))
(define-class REAL-RANGE (?class)
"An real range is a class of real numbers specified by lower
and upper bounds. Instances of an real-range are real numbers."
:iff-def (and (class ?class)
(subclass-of ?class real-number)
(= (value-cardinality ?class R-LOWER-BOUND) 1)
(= (value-cardinality ?class R-UPPER-BOUND) 1)
(forall ?i (=> (instance-of ?i ?class)
(and (=< (r-lower-bound ?class) ?i)
(=< ?i (r-upper-bound ?class)))))))
(define-function R-LOWER-BOUND (?range) :-> ?real
"(R-LOWER-BOUND r) denotes the real lower bound of range r."
:def (and (real-range ?range)
(real-number ?real)))
(define-function R-UPPER-BOUND (?range) :-> ?real
"(R-UPPER-BOUND r) denotes the real upper bound of range r."
:def (and (real-range ?range)
(real-number ?real)))
;;
;; Definitions related to TIME-RANGE
;;
(define-class TIME-RANGE (?time-range)
"TIME-RANGE denotes a certain period of time. It consists of a
start time, an end time. A start time must proceed an end time.
Relations between TIME-RANGEs are defined after James Allen's interval
relations."
:def (individual ?time-range)
:constraints (tp= (tp+ (time-range.start-time ?time-range)
(time-range.duration ?time-range))
(time-range.end-time ?time-range))
)
(define-function TIME-RANGE.START-TIME (?time-range) :-> ?time-point
"(TR-START-TIME 'tr) denotes a start time of a time range tr."
:def (and (time-range ?time-range)
(time-point ?time-point))
)
(define-function TIME-RANGE.END-TIME (?time-range) :-> ?time-point
"(TR-END-TIME 'tr) denotes an end time of a time range tr."
:def (and (time-range ?time-range)
(time-point ?time-point))
)
(define-function TIME-RANGE.DURATION (?time-range) :-> ?duration
"(TR-END-DURATION 'tr) denotes a duration of a time range tr."
:def (and (time-range ?time-range)
(duration ?duration))
)
(define-relation BEFORE (?tr1 ?tr2)
"a time range ?tr1 preceeds a time ranage ?tr2."
:iff-def (tp< (time-range.end-time ?tr1)
(time-range.start-time ?tr2))
)
(define-relation AFTER (?tr1 ?tr2)
"a time range ?tr1 succeeds a time range ?tr2."
:iff-def (tp< (time-range.end-time ?tr2)
(time-range.start-time ?tr1))
:equivalent (before ?tr2 ?tr1) ;redundant
)
(define-relation MEETS (?tr1 ?tr2)
"a time range ?tr1 ends at the same time a time range ?tr2 starts."
:iff-def (tp= (time-range.start-time ?tr1)
(time-range.start-time ?tr2))
)
(define-relation EQUALS (?tr1 ?tr2)
"a time range ?tr1 is identical to a time range ?tr2."
:iff-def (and (tp= (time-range.start-time ?tr1)
(time-range.start-time ?tr2))
(tp= (time-range.end-time ?tr1)
(time-range.end-time ?tr2)))
)
(define-relation DURING (?tr1 ?tr2)
"a time range ?tr1 is properly included in a time range ?tr2."
:iff-def (and (tp> (time-range.start-time ?tr1)
(time-range.start-time ?tr2))
(tp< (time-range.end-time ?tr1)
(time-range.end-time ?tr2)))
)
(define-relation OVERLAPS (?tr1 ?tr2)
"a time range ?tr1 and a time range ?tr2 overlaps."
:iff-def (and (tp< (time-range.start-time ?tr1)
(time-range.start-time ?tr2))
(tp< (time-range.start-time ?tr2)
(time-range.end-time ?tr1))
(tp< (time-range.end-time ?tr1)
(time-range.end-time ?tr2)))
)
(define-relation STARTS (?tr1 ?tr2)
"a time range ?tr1 and a time range ?tr2 starts at the same time
and a duration of ?tr1 is shorter than that of ?tr2."
:iff-def (and (tp= (time-range.start-time ?tr1)
(time-range.start-time ?tr2))
(tp< (time-range.end-time ?tr1)
(time-range.end-time ?tr2)))
)
(define-relation FINISHES (?tr1 ?tr2)
"a time range ?tr1 and a time range ?tr2 ends at the same time and
a duration of ?tr1 is shorter than that of ?tr2."
:iff-def (and (tp> (time-range.start-time ?tr1)
(time-range.start-time ?tr2))
(tp= (time-range.end-time ?tr1)
(time-range.end-time ?tr2)))
)
(define-relation BEFORE= (?tr1 ?tr2)
:iff-def (or (before ?tr1 ?tr2)
(meets ?tr1 ?tr2))
)
(define-relation AFTER= (?tr1 ?tr2)
:iff-def (or (after ?tr1 ?tr2)
(meets ?tr2 ?tr1))
)
(define-relation DURING= (?tr1 ?tr2)
:iff-def (or (during ?tr1 ?tr2)
(starts ?tr1 ?tr2)
(finishes ?tr1 ?tr2)
(equals ?tr1 ?tr2))
)
(define-relation OVERLAPS= (?tr1 ?tr2)
:iff-def (or (overlaps ?tr1 ?tr2)
(meets ?tr1 ?tr2))
)
(define-relation START= (?tr1 ?tr2)
:iff-def (or (starts ?tr1 ?tr2)
(equals ?tr1 ?tr2))
)
(define-relation FINISHES= (?tr1 ?tr2)
:iff-def (or (finishes ?tr1 ?tr2)
(equals ?tr1 ?tr2))
)
(define-relation DISJOINT-TR (?tr1 ?tr2)
"time ranges ?tr1 and ?tr2 do not overlap"
:iff-def (or (before ?tr1 ?tr2)
(before ?tr2 ?tr1))
)
(define-function TR+ (?tr1 ?duration) :-> ?tr2
"TR+ denotes a time range ?tr2 whose length is longer that ?tr1 by
a duration ?duration."
:iff-def (and (= (time-range.start-time ?tr1)
(time-range.start-time ?tr2))
(= (tp+ (time-range.end-time ?tr1) ?duration)
(time-range.end-time ?tr2)))
)
;;
;; Definition related to TIME-POINT
;;
(define-class TIME-POINT (?time-point)
"TIME denotes a cetain point of time. It consists of year, month,
day, hour, minute, second, and a unit of time. Any details smaller
than a unit of a time are not defined. For example, if a unit of time
is 2 hour, values of time-minute and time-second are meaningless."
:def (individual ?time-point)
)
(define-class YEAR-NUMBER (?year)
"YEAR-NUMBER deontes a year of A.D."
:def (integer ?year)
)
(define-class MONTH-NUMBER (?month)
"MONTH-NUMBER deontes a month of a year."
:axiom-def (and (integer-range month-number)
(= (i-lower-bound month-number) 1)
(= (i-upper-bound month-number) 12))
)
(define-class MONTH-NAME (?month)
"MONTH-NAME denotes a name of a month of a year."
:iff-def (member ?month
(setof january february march april may june july
august september october november december))
)
(define-instance january (month-name))
(define-instance february (month-name))
(define-instance march (month-name))
(define-instance april (month-name))
(define-instance may (month-name))
(define-instance june (month-name))
(define-instance july (month-name))
(define-instance august (month-name))
(define-instance september (month-name))
(define-instance october (month-name))
(define-instance november (month-name))
(define-instance december (month-name))
(define-class DAY-NUMBER (?day)
"DAY-NUMBER denotes a day of a month."
:axiom-def (and (integer-range day-number)
(= (i-lower-bound day-number) 1)
(= (i-upper-bound day-number) 31))
)
(define-class DAY-NAME (?day)
"DAY-NAME denotes a name of a day of a week."
:iff-def (member ?day
(setof sunday monday tuesday wednesday thursday
friday saturday))
)
(define-instance sunday (day-name))
(define-instance monday (day-name))
(define-instance tuesday (day-name))
(define-instance wednesday (day-name))
(define-instance thursday (day-name))
(define-instance friday (day-name))
(define-instance saturday (day-name))
(define-class HOUR-NUMBER (?hour)
"HOUR-NUMBER denotes an hour of a day."
:axiom-def (and (integer-range hour-number)
(= (i-lower-bound hour-number) 0)
(= (i-upper-bound hour-number) 23))
)
(define-class MINUTE-NUMBER (?minute)
"MINUTE-NUMBER denotes a minute of a hour."
:axiom-def (and (integer-range minute-number)
(= (i-lower-bound minute-number) 0)
(= (i-upper-bound minute-number) 59))
)
(define-class SECOND-NUMBER (?second)
"SECOND-NUMBER denotes a second of a minute."
:axiom-def (and (real-range second-number)
(= (r-lower-bound second-number) 0)
(= (r-upper-bound second-number) 59))
)
(define-function TIME-POINT.YEAR (?time-point) :-> ?year
"TIME-POINT.YEAR denotes a year of a time point."
:def (and (time-point ?time-point)
(year-number ?year))
)
(define-function TIME-POINT.MONTH (?time-point) :-> ?month
"TIME-POINT.MONTH denotes a month of a time point."
:def (and (time-point ?time-point)
(month-number ?month))
)
(define-function TIME-POINT.MONTH-NAME (?time-point) :-> ?month
"TIME-POINT.MONTH-NAME denotes a name of a month of a time point."
:def (and (time-point ?time-point)
(month-name ?month))
)
(define-function TIME-POINT.DAY (?time-point) :-> ?day
"TIME-POINT.DAY denotes a day of a time point."
:def (and (time-point ?time-point)
(day-number ?day))
)
(define-function TIME-POINT.DAY-NAME (?time-point) :-> ?day
"TIME-POINT.DAY-NAME denotes a name of a day of a time point."
:def (and (time-point ?time-point)
(day-name ?day))
)
(define-function TIME-POINT.HOUR (?time-point) :-> ?hour
"TIME-POINT.HOUR denotes an hour of a time point."
:def (and (time-point ?time-point)
(hour-number ?hour))
)
(define-function TIME-POINT.MINUTE (?time-point) :-> ?minute
"TIME-POINT.MINUTE denotes a minute of a time point."
:def (and (time-point ?time-point)
(minute-number ?minute))
)
(define-function TIME-POINT.SECOND (?time-point) :-> ?second
"TIME-SECOND denotes a second of a time point."
:def (and (time-point ?time-point)
(second-number ?second))
)
(define-function TIME-POINT.UNIT (?time-point) :-> ?unit
"TIME-UNIT denotes a unit of a time point."
:def (and (time-point ?time-point)
(duration ?unit))
)
(define-relation TP= (?tp1 ?tp2)
" a time point ?tp1 is equal to a time point ?tp2."
:iff-def (and (= (time-point.year ?tp1) (time-point.year ?tp2))
(= (time-point.month ?tp1) (time-point.month ?tp2))
(= (time-point.day ?tp1) (time-point.day ?tp2))
(= (time-point.hour ?tp1) (time-point.hour ?tp2))
(= (time-point.minute ?tp1) (time-point.minute ?tp2))
(= (time-point.second ?tp1) (time-point.second ?tp2)))
)
(define-relation TP< (?tp1 ?tp2)
"a time point ?tp1 preceeds a time point ?tp2."
:iff-def (or (< (time-point.year ?tp1)
(time-point.year ?tp2))
(and (= (time-point.year ?tp1)
(time-point.year ?tp2))
(or (< (time-point.month ?tp1)
(time-point.month ?tp2))
(and (= (time-point.month ?tp1)
(time-point.month ?tp2))
(or (< (time-point.day ?tp1)
(time-point.day ?tp2))
(and (= (time-point.day ?tp1)
(time-point.day ?tp2))
(or (< (time-point.hour ?tp1)
(time-point.hour ?tp2))
(and (= (time-point.hour ?tp1)
(time-point.hour ?tp2))
(or (< (time-point.minute ?tp1)
(time-point.minute ?tp2))
(and (= (time-point.minute ?tp1)
(time-point.minute ?tp2))
(or (< (time-point.second ?tp1)
(time-point.second ?tp2)))))))))))))
)
(define-relation TP> (?tp1 ?tp2)
"inverse of TP<"
:iff-def (tp< ?tp2 ?tp1)
)
(define-function TP+ (?tp1 ?duration) :-> ?tp2
"A difference between tow time points ?tp1 and ?tp2 is a
duration ?duration."
:def (and (time-point ?tp1)
(duration ?duration)
(time-point ?tp2))
)
;;
;; Definitions related to DURATION
;;
(define-class DURATION (?duration)
"DURATION denotes a period of time. It consists of a value and a
measure"
:def (individual ?duration)
)
(define-function DURATION.VALUE (?duration) :-> ?value
"DURATION.VALUE returns a length of a duration in a cetain measure."
:def (and (duration ?duration)
(integer ?value))
)
(define-function DURATION.MEASURE (?duration) :-> ?measure
"DURATION.MEASURE returns a mesure of a length of a duration."
:def (and (duration ?duration)
(temporal-measure ?measure))
)
(define-relation DR= (?dr1 ?dr2)
"Two duration is the same length."
:def (and (duration ?dr1)
(duration ?dr2))
)
(define-relation DR< (?dr1 ?dr2)
"A duration ?dr1 is shorter than a duration ?dr2."
:def (and (duration ?dr1)
(duration ?dr2))
)
(define-relation DR> (?dr1 ?dr2)
:iff-def (dr< ?dr2 ?dr1)
)
(define-function DR+ (?dr1 ?dr2) :-> ?dr3
:def (and (duration ?dr1)
(duration ?dr2)
(duration ?dr3))
)
;;
;; Definitions related to TEMPORAL-MEASURE
;;
(define-class TEMPORAL-MEASURE (?measure)
"TEMPORAL-MEASURE denotes a measure of a length of a temporal
interval."
:iff-def (member ?measure
(setof year month day hour minute second))
)
(define-instance year (temporal-measure))
(define-instance month (temporal-measure))
(define-instance day (temporal-measure))
(define-instance hour (temporal-measure))
(define-instance minute (temporal-measure))
(define-instance second (temporal-measure))
This Lisp-to-HTML translation was brought to you by
François Gerbaux and Tom Gruber