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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;;   VT-DESIGN: a restricted class of configuration design 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

;;; Last modification: 19 August 1993 

(in-package "ONTOLINGUA-USER") 

(define-theory VT-DESIGN (configuration-design 
			  scalar-quantities 
			  standard-units) 

  "This ontology specializes the configuration design task for the VT problem. 
It defines the type of components that are to be designed and the restricted 
set of operators that may appear in constraints.  It specializes the more 
general configuration design theory by adding commitments to a notion of 
optimality based on a cost function.") 

(in-theory 'VT-DESIGN) 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;;   Limitations on the constraint language 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

(define-class VT-CONSTRAINT (?c) 
  "All VT constraints have a restricted form, specified by 
vt-constraint-sentence." 
  :def (and (constraint ?c) 
            (value-type ?c constraint.expression vt-constraint-sentence))) 

(define-class VT-CONSTRAINT-SENTENCE (?sentence) 
  "A VT constraint-sentence is a constraint-sentence with the logical 
operators, relational constants, and attribute operators restricted as 
listed below." 
  :def (and (constraint-expression ?sentence) 
            (restricted-constraint-sentence 
              ?sentence 
              (one-of 'and 'or 'not '=> '<= '<=>) 
              (one-of '= '/= '< '> '=< '>= 'member) 
              (one-of '+ '- '* '/ 'setof)))) 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;;   OPTIMALITY & COMPONENT COST 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

(define-class VT-COMPONENT (?component) 
 "A VT component is just a component as defined 
by the configuration-design ontology, except that we define a slot 
for the cost." 
  :def (and (component ?component) 
            (value-type ?component HAS-CONSTRAINT vt-constraint) 
            (has-attribute ?component COMPONENT.COST) 
            (cost-quantity (COMPONENT.COST ?component))) 

  :issues (("Why not include the sum of subparts in the cost metric?" 
           "That assumes linear combination function for cost, which 
            is a domain specific assumption."))) 

(define-function COMPONENT.COST (?component) :-> ?cost 
   "The monetary cost of a component in a design." 
   :def (and (component ?component) 
	     (cost-quantity ?cost))) 

(define-class COST-QUANTITY (?q) 
  "A scalar quantity of the physical dimension 'currency'.  By use of 
the standard-dimensions-and-units theory, costs can be stated in a 
variety of known currencies, and translation can be accomodated." 

  :def (and (scalar-quantity ?q) 
	    (= (quantity.dimension ?q) currency-dimension))) 

(define-relation OPTIMAL-COMPONENT (?comp ?component-class) 
  "An optimal-component is the least costly instance 
of a component class.  To evaluate this relation will 
require making some kind of closed-world assumption over 
possible components." 

  :iff-def (and (component ?comp) 
		(component-class ?component-class) 
		(instance-of ?comp ?component-class) 
		(=> (instance-of ?other-component ?component-class) 
		    (=< (component.cost ?comp) 
                        (component.cost ?other-component))))) 


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