Rudy’s OBTF Rudolf Adamkovič

Home / Computer science / SAT solver / Practice implementation: Emacs Lisp


Solver: Creating domains

(defun my-sat-domains (clauses)
  (mapcar (lambda (variable) (cons variable '(0 1)))
          (delete-dups (mapcar #'abs (apply #'append clauses)))))
(ert-deftest my-sat-domains/no-clauses ()
  (should (equal (my-sat-domains '()) '())))

(ert-deftest my-sat-domains/single-clause ()
  (should (equal (my-sat-domains '((1)))
                 '((1 . (0 1)))))
  (should (equal (my-sat-domains '((1 2)))
                 '((1 . (0 1))
                   (2 . (0 1))))))

(ert-deftest my-sat-domains/multiple-clauses ()
  (should (equal (my-sat-domains '((1) (2)))
                 '((1 . (0 1))
                   (2 . (0 1)))))
  (should (equal (my-sat-domains '((1) (1 2) (3)))
                 '((1 . (0 1))
                   (2 . (0 1))
                   (3 . (0 1))))))

(ert-deftest my-sat-domains/negated-literals ()
  (should (equal (my-sat-domains '((1 -2) (-1 2)))
                 '((1 . (0 1))
                   (2 . (0 1))))))

© 2025 Rudolf Adamkovič under GNU General Public License version 3.
Made with Emacs and secret alien technologies of yesteryear.