SMT-решатель - это SAT-решатель + процедура принятия решения
Решатель SAT - это решатель проблемы решения: проблема SAT - это проблема решения. Кроме того, эта проблема решения "самовосстанавливаемая":
Проблема SAT является самовосстанавливаемой, то есть каждый алгоритм, который правильно отвечает, если экземпляр SAT является разрешимым, можно использовать для поиска удовлетворительного назначения.
- ( Википедия )
Это означает, что решатели SAT могут также дать удовлетворительное назначение, в дополнение к решению проблемы.
TL; DR SMT решатели решают обобщение проблемы SAT, в зависимости от типов / ограничений, разрешенных в теории. Кроме того, они также позволяют кодирование отношений типов более высокого уровня, чем позволяют кодировки SAT.
( A = B ) ∧ ( B = C)⟹( А = С)
- См. Beaver SMT solver, который может даже вывести эквивалентную проблему SAT, которую необходимо решить.
Хотя решатель QF_BV SMT обладает этим преимуществом по сравнению с решателем SAT, я не думаю, что это преимущество сложности: они оба по существу эквивалентны и требуют экспоненциального времени для решения своих проблем в худшем случае. Но практически, решатель QF_BV SMT может быть намного быстрее благодаря этим дополнительным знаниям. См. Мой ответ на лимиты решателей SMT , где приведен пример чего-то, что считается «сложным», что (текущие) решатели QT_BV SMT и решатели SAT могут подавиться.
Существуют также решатели SMT, которые пытаются решить даже более сложные проблемы, чем булева удовлетворенность (например, разрешают типы и ограничения на реалы или разрешают квантификаторы); очевидно, что они теоретически, по крайней мере, такие же медленные, как SAT-решатель. Эти решатели SMT являются решением обобщения проблемы SAT; вместо использования бинарных переменных каждая «теория» допускает отношения / ограничения в разных областях, таких как действительные или количественные (для всех) ограничения.
Доказательство теоремы
п= Nп
Но такие изменения могут бледнеть по сравнению с революцией, которую эффективный метод решения NP-полных задач может вызвать в самой математике. По словам Стивена Кука, [19]
... это преобразовало бы математику, позволив компьютеру найти формальное доказательство любой теоремы, которая имеет доказательство разумной длины, поскольку формальные доказательства могут быть легко распознаны за полиномиальное время. Примеры задач вполне могут включать в себя все призовые задачи CMI.
- ( Википедия )
[19]: Кук, Стивен (апрель 2000 г.). Проблема P против NP. Математический институт глины (PDF) .
п= Nп
Но пока что автоматические теоремы в основном доказывают использование эвристических алгоритмов или алгоритмов экспоненциального времени (но все еще полезны).
Решатель ограничений
Обычно это переформулировки решателей SAT / SMT на другие языки. Если вы когда-либо использовали какие-либо решатели SAT / SMT для решения проблемы, вы действительно можете полюбить недетерминированные способности решателей. То есть вместо того, чтобы говорить компьютеру, как что-то сделать, вы говорите ему, что хотите , т.е. какие свойства вы хотите, чтобы вывод имел, и решатель SAT / SMT будет недетерминированным «заполнять его», не беспокоя вас о деталях реализации. Такая парадигма программирования очень привлекательна и называется программированием ограничений , и для запуска она должна использовать решатель ограничений (который может использовать решатель SAT / SMT в бэкэнде, в зависимости от типов и ограничений, которые он позволяет использовать) ,
Но я вижу людей, называющих Z3 доказателем теорем. Так что я не знаю, как придумать эти условия.
AFAIK, Z3 - это набор из множества инструментов, включая SMT-решатель, несколько языков для проверки теорем / проверки моделей и многое другое.
И какой самый общий термин для всех них?
Я думаю, что обобщением проблемы выполнимости является теория удовлетворенности по модулю , и поэтому «SMT решатель» будет самым общим из всех этих. Однако не все реальные реализации решателя SMT решают все теории, так что это не означает, что все решатели SMT одинаково общие.