anchor.diff:                        (destructure-concrete-effect exp)
                       `(setf (aref ,new-bits ,(state-vars-index state-vars var))
                              ,(if sign 1 0)))))
  -         (make-concrete-state :bits ,new-bits)))))
  +         (make-concrete-state :bits ,new-bits
  +                              ;; TODO: this could be better
  +                              :exp (list 'and
  +                                         ,@(loop
  +                                              for i below (state-vars-size state-vars)
  +                                              for v = (state-vars-ref state-vars i)
  +                                              collect `(if (zerop (aref ,new-bits ,i))
  +                                                           (list 'not ',v)
  +                                                           ',v))))))))
   
   (defun concrete-state-compile-effect (effect state-vars)
     "Return a compiled lambda expression that creates a new state with `EFFECT' set."
  
positive.code: 
  
  (defun smt-plan-encode (state-vars concrete-actions
                          initial-true initial-false
                          goal
                          steps)
    (let* ((smt-statements nil)
  
negative.code:     (assert i)
      i))
  
  (defun state-vars-ref (state-vars i)
    (nth i state-vars))
  
  (defun state-vars-size (state-vars)
    (length state-vars))
  
  