SMT solver - це рішення SAT + процедура прийняття рішення
Розв'язувач SAT - це вирішення проблеми рішення: проблема SAT - це проблема рішення. Крім того, ця проблема вирішення "самовідводиться":
Проблема SAT є самовідновлюваною, тобто кожен алгоритм, який правильно відповідає, якщо екземпляр SAT вирішується, може бути використаний для пошуку задовольняючого завдання
- ( Вікіпедія )
Це означає, що розв'язувачі SAT також можуть вирішити проблему, крім вирішення проблеми.
Розв'язувачі TL; DR SMT вирішують узагальнення задачі SAT, залежно від типів / обмежень, дозволених у теорії. Крім того, вони також дозволяють кодувати відносини типів більш високого рівня, ніж це дозволяє кодування SAT.
Розв'язувач SAT зазвичай має справу з багатьма одиночними булевими змінними, які пов'язані лише через положення / обмеження CNF . Теорія SMT-розв'язувача QF_BV (без квантифікаторів), в основному, розв'язувач SAT + додаткова інформація про взаємозв'язки. Наприклад, розв'язувач QT_BV SMT можна привести до SAT 1 . Так навіщо використовувати вирішувач QT_BF SMT? Основна перевага полягає в тому, що в SAT ціле число представлено різними змінними, які на перший погляд можуть здатися не пов'язаними. Розв'язувач SAT витратив би багато часу на повторне вивчення простих відносин, наприклад на цілому рівні( A = B ) ∧ ( B = C)⟹( А = С) , в той час як SMT-розв'язувач знає, що окремі біти пов'язані таким чином з самого початку, оскільки мова SMT QF_BV знаходиться на цілому рівні (фіксована ширина біта). Таким чином, розв'язувач QT_BV SMT може міркувати на цілому рівні, крім рівня бітів.
- Див. Вирішувач Beaver SMT, який навіть може вивести еквівалентну проблему SAT, яку потрібно вирішити.
Хоча вирішувач QF_BV SMT має цю перевагу перед рішенням SAT, я не думаю, що це є перевагою складності: вони обидві по суті еквівалентні і потребують експоненціального часу для вирішення своїх найгірших проблем. Але практично, вирішувач QF_BV SMT може бути набагато швидшим завдяки цим додатковим знанням. Дивіться мою відповідь на обмеження вирішувачів SMT , на прикладі чогось, що вважається "важким", що (поточні) розв'язувачі SMT QF_BV і SAT вирішуватимуться.
Є також розв'язувачі SMT, які намагаються вирішити ще складніші проблеми, ніж булева задоволеність (наприклад, дозволяючи типи та обмеження щодо дій, або дозволяючи кількісні показники); очевидно, що вони теоретично принаймні такі ж повільні, як вирішувач SAT. Ці розв'язки SMT є вирішенням узагальнення проблеми SAT; замість використання бінарних змінних, кожна "теорія" допускає зв'язки / обмеження для різних областей, таких як реальні чи кількісно визначені (для всіх) обмеження.
Теорема підтвердження
Автоматизована теорема доводить є вирішувач , що при будь - то системі доказів, деякі припущення, і мета , щоб довести, буде «заповнити прогалини» між припущеннями і цілі. У ньому також буде якийсь верифікатор для перевірки доказів (який швидко працює). Підтвердження теореми може покластись на розв'язувач SAT для заповнення пробілів; насправді, якщо і існує практичний алгоритм вирішення повних завдань NP, потенційно можна довести майже всі корисні доказові речі (у розумні строки):П= 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-рішення є однаковими загальними.