anchor.diff:           (concrete-actions (or concrete-actions
                                  (smt-concrete-actions (operators-actions operators)
                                                         (facts-objects facts))))
  -         (initial-true (or initial-true (facts-init facts)))
  -         (initial-false (or initial-false
  -                            (set-difference  state-vars initial-true :test #'equal)))
  +         (initial-true (unless initial-state (or initial-true (facts-init facts))))
  +         (initial-false (unless initial-state (or initial-false
  +                                                  (set-difference  state-vars initial-true :test #'equal))))
  +         (initial-state (or initial-state
  +                            `(and ,@initial-true
  +                                  ,@(loop for v in initial-false collect `(not ,v)))))
  +
            (goal (or goal (facts-goal facts))))
       (labels ((rec (steps)
                  (multiple-value-bind (assignments is-sat)
                      (multiple-value-bind (stmts vars)
                          (smt-plan-encode state-vars concrete-actions
  -                                        initial-true initial-false
  +                                        initial-state
                                           goal
                                           steps)
                        (smt-run stmts vars))
  
positive.code:   effect)
  
  (defstruct concrete-state
    (bits (make-array 0 :element-type 'bit)))
  
  (defun concrete-state-compare (a b)
    (let* ((a-bits (concrete-state-bits a))
  
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))
  
  