anchor.diff:               (integer-list-list-alistp (cdr ali)))
         nil)))
   
  -; assuming ali is an alist.
  -(defun keys-are-all-strings (ali)
  -  (if (endp ali)
  -      t
  -    (if (stringp (caar ali))
  -        (keys-are-all-strings (cdr ali))
  -      nil)))
  -
   (defun rels-well-formed (rels len)
     (and (rels-of-proper-len rels len)
          (integer-list-list-alistp rels)
  -       (keys-are-all-strings rels)))
  +       (symbol-alistp rels)))
   
   ; predicate function for frames. The relations must all have the appropriate
   ; number of nodes and format.
  
positive.code: ; a list of these rel's is an association list with names as values.
  
  ; convenience functions for making a frame and getting its two
  ; components. Num-nodes has to be an integer; atomic-programs should be a list
  ; of rels (each of which is made by make-rel).
  (defun make-frame (num-nodes atomic-programs)
    (list num-nodes atomic-programs))
  (defun get-num-nodes (f) (nth 0 f))
  (defun get-atomic-programs (f) (nth 1 f))
  
  
negative.code: ; So each relation is a list of list of integers, the ith element of which
  ; specifies the list of arcs coming out of node i (each element in the list
  ; that's the ith element of the relation will be an integer uniquely
  ; representing the destination node). The name of the relation must be a
  ; symbol.
  (defun make-rel (name edges)
    (cons name edges))
  (defun get-rel-name (rel) (car rel))
  