anchor.diff:    (let ((ev (pop (events-of obj))))
       (declare (type event ev))
       (funcall (action-of ev) obj)))
  +
  +
  +(defmethod subscribable-states ((obj object))
  +  (list))
  +
  +
  +(defmethod subscribed? ((sub object) (obj object) state)
  +  (multiple-value-bind (subscribers state-present?)
  +      (gethash state (subscriptions-of obj))
  +    (if (not state-present?)
  +	(error "not a valid state")
  +	(not (null (find sub subscribers))))))
  +
  +
  +(defmethod subscribe ((sub object) (obj object) state notification)
  +  (if (subscribed? sub obj state)
  +      (error "already subscribed to state")
  +      (not (null (push `(,sub . ,notification)
  +		       (gethash state
  +				(subscriptions-of obj)))))))
  +
  +
  +(defmethod unsubscribe ((sub object) (obj object) state)
  +  (if (not (subscribed? sub obj state))
  +      (error "not suscribed to state")
  +      (setf (gethash state
  +		     (subscriptions-of obj))
  +	    (delete sub (gethash state
  +				 (subscriptions-of obj))
  +		    :key #'car))))
  +
  +
   
   
   (let ((clock 0))
  
positive.code:     :initform (list)
      :accessor events-of
      :type list)
     (observable-states
      :initform (list)
      :accessor observable-states-of
      :type list)
     (notifications
      :initform (list)
      :accessor notifications-of
      :type list)))
  
  
  (defmethod imminent-event-time ((obj object))
  
negative.code: 
  
  (defgeneric imminent-event-time (obj)
    (:documentation "Return time and owner of the next event to be
    executed belonging to obj."))
  
  
  (defgeneric subscribable-states (obj)
    (:documentation "Return the list of subscribable states of obj."))
  
  
  (defgeneric subscribe (sub obj state notification)
  