Как постоянные входные данные влияют на постановку задачи SAT?
Допустим, у меня есть схема черного ящика с N входами и 1 выходом.
Я хочу зафиксировать значение M входов и найти значение остальных входов (NM), для которых схема является удовлетворительной. Если я вручную исправлю вводы M в RTL Verilog и преобразую его в CNF (используя abc), это даст правильный результат? Это правильный подход к такого рода проблемы?
1 ответ
Оригинальное пространство поиска вашей проблемы имеет 2^N
записей. Фиксируя M
входы, пространство поиска уменьшается в 2^M
и имеет 2^(N-M)
записей.
В зависимости от вашего выбора фиксированного M
вводя значения, вы можете либо упростить поиск, либо слишком сильно сократить пространство поиска и в конечном итоге не найти решения.
Ваш черный ящик представляет собой комбинаторную схему, где выход зависит исключительно от текущего состояния входов? В RTL
(регистрация уровня передачи / язык), вы также можете описать последовательный механизм, где выход также зависит от предыдущих входов.
Чтобы принять во внимание фиксированные входы, это называется Boolean Constraint Propagation. Это в основном упрощает вашу схему, так как могут быть удалены все элементы, которые имеют предопределенный выход. Примеры: Ан AND
с одним или несколькими ложными входами имеет ложный выход. OR
с одним или несколькими истинными входными данными есть истинные выходные и т. д. Другие упрощения включают удаление двойных отрицаний и инвертированных пар ввода XOR/XNOR
ворота.
Вы могли бы взглянуть на bc2cnf, переводчик из булева формата списка цепей в файл DIMACS/CNF, перевариваемый SAT-решателем. Подобно ABC, bc2cnf будет распространять постоянные входные данные и доставлять довольно оптимизированный CNF.