anchor.diff:  (defun cria-psr (variaveis dominios restricoes)
     ""
     (let ((pares (make-hash-table :test 'equal)))
  -    (mapcar #'(lambda (v d) (setf (gethash v pares) d)) variaveis dominios)
  +    (mapcar #'(lambda (v d) (setf (gethash v pares) (vector d nil))) variaveis dominios)
  +    (dolist (r restricoes)
  +      (dolist (v (restricao-variaveis r) v)
  +	(push r (elt (gethash v pares) 1))))
  +    (maphash #'(lambda (v dr) (declare (ignore v)) (nreverse (elt dr 1))) pares)
       (make-psr :variaveis-todas variaveis :pares pares :restricoes restricoes)))
   
   
  
positive.code: ;;; psr-adiciona-atribuicao!: PSR x variavel x valor -> {}
  (defun psr-adiciona-atribuicao! (p v n)
    ""
    (setf (gethash v (psr-pares p)) (list n)))
  
  
  ;;; psr-remove-atribuicao!: PSR x variavel -> {}
  (defun psr-remove-atribuicao! (p v)
    ""
    (setf (gethash v (psr-pares p)) nil))
  
  
  ;;; psr-altera-dominio!: PSR x variavel x dominio {}
  (defun psr-altera-dominio! (p v d)
    ""
    (setf (gethash v (psr-pares p)) d))
  
  
  ;;; psr-completo-p: PSR -> logico
  
negative.code: (defun psr-atribuicoes (p)
    "Retorna uma lista com todas as atribuicoes - pares (variavel . valor) - do PSR."
    (let ((atribuicoes (list)))
      (maphash #'(lambda (v dr) (when (= (length (elt dr 0)) 1)
  				(push (cons v (first (elt dr 0))) atribuicoes))) 
  	     (psr-pares p))
      atribuicoes))
  
  