% @(#)$Id: TypePerspectives.lsl,v 1.10 1996/11/15 12:30:46 leavens Exp $
% What a state knows about the "types" an object may have
% This trait was corrected and proved by Hua Zhong.
TypePerspectives: trait
  assumes State_Basics
  includes Set(TYPE, Set[TYPE], int for Int)
    types_of: Object, State -> Set[TYPE]
    hasType: Object, State, TYPE -> Bool
    \forall obj, obj1: Object, t: TYPE, typs: Set[TYPE],
            v: Value, st: State
      types_of(obj, emptyState) == {};
      types_of(obj, bottom) == {};
      ~isBottom(st) =>
         types_of(obj, bind(st, obj1, v, typs)) 
          = (if (obj=obj1) then typs 
                           else types_of(obj,st));
      hasType(obj, st, t) == t \in types_of(obj, st);
    \forall obj, obj1: Object, t: TYPE, v: Value, st: State
      ~allocated(obj, st) => (types_of(obj, st) = {});
    converts types_of, hasType


HTML generated using lcpp2html.