;;(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 JOB-ASSIGNMENT-TASK (jat-generic) 
    "This theory defines a task ontology for the job assignment task. 
The job assignment task, which is a class of sheduling problems, is a 
problem of assigning all given jobs to the available resources within 
the time range, while satisfying various constraints. 
This theory is based on Ontolingua V 3.0") 

(in-theory 'JOB-ASSIGNMENT-TASK) 

;; 
;; Generic classes for assignemnt task 
;; 
(define-class ASSIGNMENT-OBJECT (?object) 
    "ASSIGNMENT-OBJECT denotes an object appearing generally in 
assignment problems." 
    :def (individual ?object) 
    :axiom-def (subclass-partition 
		ASSIGNMENT-OBJECT 
		(setof source target)) 
) 

(define-class SOURCE (?source) 
    "SOURCE denotes an object to be assigned to an object of TARGET." 
    :def (assignment-object ?source) 
) 

(define-class TARGET (?target) 
    "TARGET denotes an object to which an object of SOURCE is to be 
assigned." 
    :def (assignment-object ?target) 
) 

(define-function ASSIGNMENT (?source) :-> ?target 
    "ASSIGNMENT denotes a mapping from SOURCE to TARGET." 
    :def (and (source ?source) 
	      (target ?target)) 
) 


;; 
;; Definitons related to JOB 
;; 

(define-class JOB (?job) 
    "JOB is an abstract class that denotes an object to be assigned to 
     a resource, or a collection of such objects." 
    :def (source ?job) 
) 

(define-class TEMPORALLY-FIXED-JOB-CLASS (?class) 
    "TEMPORALLY-FIXED-JOB-CLASS denotes a job whose assignment to a 
time range is predefined." 
    :iff-def (and (class ?class) 
		  (subclass-of ?class job) 
		  (slot-cardinality ?class assigned-time-range 1)) 
) 

(define-class FIXED-LENGTH-JOB-CLASS (?class) 
    "FIXED-LENGTH-JOB-CLASS  denotes a job whoes length is independent 
of a resource and fixed." 
    :iff-def (and (class ?class) 
		  (subclass-of ?class job) 
		  (slot-cardinality ?class fixed-length-job.length 1)) 
) 

(define-class UNIT-LENGTH-JOB-CLASS (?class) 
    "UNIT-LENGTH-JOB denotes a job whose length is the same." 
    :iff-def (and (fixed-length-job-class ?class) 
		  (= (value-cardinality ?class JOB-UNIT-LENGTH) 1) 
		  (forall ?i (=> (instance-of ?i ?class) 
				 (= (fixed-length-job.length ?i) 
				    (job-unit-length ?class))))) 
) 

(define-function JOB-UNIT-LENGTH (?job-class) :-> ?length 
    "Each job class of unit-length-job-class has its own length." 
    :def (and (unit-length-job-class ?job-class) 
	      (duration ?length)) 
) 
		  
(define-function JOB.LENGTH (?job ?res) :-> ?length 
    "JOB.LENGTH returns a duration of the job." 
    :def (and (job ?job) 
	      (resource ?res) 
	      (duration ?length)) 
)     

(define-function FIXED-LENGTH-JOB.LENGTH (?job) :-> ?length 
    "FIXED-LENGTH-JOB.LENGTH returns a duration of the job. The length 
does not depend on resources." 
    :def (and (job ?job) 
	      (duration ?length)) 
)     

(define-function JOB.TIME-RANGE (?job) :-> ?time-range 
    "JOB-TIME-RAGNE returns a time range where a job is permitted to 
     be assigned" 
    :def (and (job ?job) 
	      (time-range ?time-range)) 
) 

;; 
;; Definitions related to RESOURCE 
;; 

(define-class RESOURCE (?resource) 
    "RESOURCE is an abstract class that denotes an object to which a 
     job is assigned, or a collection of such objects." 
    :def (target ?resource) 
) 

;; 
;; Definition for TIME-RANGE  

(define-class JAT-TIME-RANGE (?time-range) 
    "JAT-TIME-RANGE denotes a time range which is referred to in the 
job assignment task." 
    :def (and (time-range ?time-range) 
	      (target ?time-range)) 
) 

(define-class DISCRETE-TIME-RANGE-CLASS (?class) 
    "DISCRETE-TIME-RANGE-CLASS denotes a time range whose start time 
and end time are measured by a time-range-unit." 
    :iff-def (and (class ?class) 
		  (= (value-cardinality ?class TIME-RANGE-UNIT) 1) 
		  (forall ?i (=> (instance-of ?i ?class) 
				 (and (measured-by 
				       (time-range.start-time ?i) 
				       (time-range-unit ?class)) 
				      (measured-by 
				       (time-range.end-time ?i) 
				       (time-range-unit ?class)))))) 
) 

(define-function TIME-RANGE-UNIT (?tr-class) :-> ?unit 
    "A time-range class of discrete-time-range-class has its own 
minimun unit of duration." 
    :def (and (discrete-time-range-class ?tr-class) 
	      (duration ?unit)) 
) 

(define-relation MEASURED-BY (?tp ?unit) 
    "A time point ?tp can be measured by a unit of duration ?unit." 
    :def (and (time-point ?tp) 
	      (duration ?unit)) 
) 
  
(define-class UNIT-TIME-RANGE-CLASS (?class) 
    "UNIT-TIME-RANGE-CLASS deontes a time ragne whose duration is a 
unit length." 
    :iff-def (and (discrete-time-range-class ?class) 
		  (forall ?i (=> (instance-of ?i ?class) 
				 (= (time-range.duration ?i) 
				    (time-range-unit ?class))))) 
) 


;; 
;; Definition for ASSIGNMENT 
;; 

(define-function ASSIGNED-RESOURCE (?job) :-> ?res 
    "ASSIGNED-RESOURCE returns a resouce to which a job is assinged." 
    :def (and (job ?job) 
	      (resource ?res)) 
    :axiom-def (subrelation-of assigned-resource assignment) 
) 

(define-function ASSIGNED-TIME-RANGE (?job) :-> ?time-range 
    "ASSIGNED-TIME_RANGE returns a time range to which a job is assigned." 
    :def (and (job ?job) 
	      (jat-time-range ?time-range)) 
    :axiom-def (subrelation-of assigned-time-range assignment) 
) 


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