Введение
Логическая проблема, изучаемая в информатике В информатике и математической логике, теории модуля удовлетворимости (SMT) - это проблема определения того, является ли математическая формула удовлетворительной. Он обобщает булевую задачу удовлетворимости (SAT) для более сложных формул, включающих реальные числа, целые числа и / или различные структуры данных, такие как списки, массивы, битовые векторы и строки. Название происходит от того, что эти выражения интерпретируются в рамках ("модуля") определенной формальной теории в логике первого порядка с равенством (часто не допускающим количественных знаков). SMT-решатели - это инструменты, которые направлены на решение SMT-задачи для практического подмножества входных данных. Разработчики SMT, такие как Z3 и cvc5, использовались в качестве строительного блока для широкого спектра приложений в компьютерной науке, включая автоматическое доказательство теоремы, анализ программы, проверку программы и тестирование программного обеспечения. Поскольку булевая удовлетворимость уже NP-полной, задача SMT обычно NP-трудна, и для многих теорий она нерешима. Исследователи изучают, какие теории или подмножества теорий приводят к решительной проблеме SMT и вычислительной сложности решительных случаев. Полученные в результате процедуры принятия решений часто реализуются непосредственно в SMT-решателях; см., например, решаемость арифметики Пресбургера. SMT можно рассматривать как проблему удовлетворения ограничений и, следовательно, определенный формализованный подход к программированию ограничений.
In computer science and mathematical logic, satisfiability modulo theories (SMT) is the problem of determining whether a mathematical formula is satisfiable. It generalizes the Boolean satisfiability problem (SAT) to more complex formulas involving real numbers, integers, and/or various data structures such as lists, arrays, bit vectors, and strings. The name is derived from the fact that these expressions are interpreted within ("modulo") a certain formal theory in first order logic with equality (often disallowing quantifiers). SMT solvers are tools that aim to solve the SMT problem for a practical subset of inputs. SMT solvers such as Z3 and cvc5 have been used as a building block for a wide range of applications across computer science, including in automated theorem proving, program analysis, program verification, and software testing. Since Boolean satisfiability is already NP complete, the SMT problem is typically NP hard, and for many theories it is undecidable. Researchers study which theories or subsets of theories lead to a decidable SMT problem and the computational complexity of decidable cases. The resulting decision procedures are often implemented directly in SMT solvers; see, for instance, the decidability of Presburger arithmetic. SMT can be thought of as a constraint satisfaction problem and thus a certain formalized approach to constraint programming.
Связь с автоматическим доказательством теоремы
Существует значительное совпадение между решением SMT и автоматизированным доказательством теоремы. Как правило, автоматические доказывающие теоремы сосредотачиваются на поддержке полной логики первого порядка с помощью количественных показателей, тогда как решители SMT больше сосредотачиваются на поддержке различных теорий (интерпретируемые символы предиката). АТП преуспевают в решении задач с большим количеством количественных показателей, тогда как решители SMT хорошо справляются с большими задачами без количественных показателей. Линия достаточно размыта, что некоторые АТП участвуют в SMT COMP, в то время как некоторые решители SMT участвуют в CASC.
Выразительная сила
Инстанция SMT - это обобщение инстанции булевой SAT, в которой различные наборы переменных заменяются предикатами из различных основных теорий. Формулы SMT обеспечивают гораздо более богатый язык моделирования, чем это возможно с булевыми формулами SAT. Например, формула SMT позволяет моделировать операции микропроцессора на уровне слов, а не на уровне битов. Для сравнения, программирование множества ответов также основано на предикатах (точнее, на атомных предложениях, созданных из атомных формул). В отличие от SMT, программы множеств ответов не имеют количественных показателей и не могут легко выражать ограничения, такие как линейная арифметика или логика различий. Программирование множеств ответов лучше всего подходит для булевых задач, которые сводятся к свободной теории неинтерпретируемых функций. Реализация 32-битовых целых чисел в качестве бит-векторов в программировании наборов ответов страдает от большинства тех же проблем, с которыми сталкивались ранние решатели SMT: "очевидные" идентичности, такие как x + y = y + x, трудно вывести. Логическое программирование с ограничениями обеспечивает поддержку линейных арифметических ограничений, но в совершенно иных теоретических рамках. Разработчики SMT также были расширены для решения формул в логике более высокого порядка.
" Решающий " приближается .
Ранние попытки решения инстанций SMT включали их перевод в инстанции булевого SAT (например, 32-битовая целочисленная переменная будет закодирована 32-битовыми однобитовыми переменными с соответствующими весами, а операции на уровне слов, такие как "плюс", будут заменены логическими операциями более низкого уровня на битах) и передача этой формулы в булевой решатель SAT. Этот подход, который называется "желательным" подходом (или "битбластинг"), имеет свои достоинства: путем предварительной обработки формулы SMT в эквивалентную формулу Булева SAT существующие булевы SAT-решения могут использоваться "как есть" и их производительность и улучшение мощности с течением времени. С другой стороны, потеря семантики основных теорий на высоком уровне означает, что решающий булевой SAT должен работать намного усерднее, чем необходимо, чтобы обнаружить "очевидные" факты (например, для сложения целых чисел). Это наблюдение привело к разработке ряда решений SMT, которые тесно интегрируют булево-булево рассуждение поиска в стиле DPLL с решений, специфичных для теории (решений T), которые обрабатывают соединения (AND) предикатов из данной теории. Этот подход называется ленивым подходом. Названная DPLL ((T), эта архитектура передает ответственность за булевое рассуждение на основе DPLL SAT-решателю, который, в свою очередь, взаимодействует с решителем для теории T через хорошо определенный интерфейс. Теоретику нужно только беспокоиться о проверке осуществимости соединений теоретических предикатов, переданных ему от SAT-решателя, поскольку он исследует булевое пространство поиска формулы. Однако для того, чтобы эта интеграция работала хорошо, теоретический решающий должен быть в состоянии участвовать в распространении и анализе конфликтов, т.е. он должен быть в состоянии выводить новые факты из уже установленных фактов, а также предоставлять краткие объяснения неосуществимости, когда возникают конфликты теории. Другими словами, теоретический решающий должен быть постепенным и отслеживаемым.
Решаемые теории
Исследователи изучают, какие теории или подмножества теорий приводят к решительной проблеме SMT и вычислительной сложности решительных случаев. Поскольку логика первого порядка полностью полурешима, одна из направлений исследований пытается найти эффективные процедуры принятия решений для фрагментов логики первого порядка, таких как эффективная пропозициональная логика. Другая линия исследований включает в себя разработку специализированных теорий, включая линейную арифметику над рациональными и целыми числами, битвекторы с фиксированной шириной, арифметику плавающей запятой (часто реализуемую в решителях SMT через бит-взрыв, т. е. сокращение до битвекторов), строки, (со) типы данных, последовательности (используемые для моделирования динамических массивов), конечные множества и отношения, логику разделения, конечные поля и неинтерпретируемые функции среди других. Булева монотонные теории - это класс теорий, которые поддерживают эффективное распространение теории и анализ конфликтов, позволяя практическое использование в DPLL (T) решителей. Монотонные теории поддерживают только булевые переменные (булевой является единственным сортом), и все их функции и предикаты p подчиняются аксиоме Примеры монотонных теорий включают доступность графа, обнаружение столкновений для выпуклых корпусов, минимальные разрезы и логику дерева вычислений. Каждая программа Datalog может быть интерпретирована как монотонная теория.
Examples of monotonic theories include graph reachability, collision detection for convex hulls, minimum cuts, and computation tree logic. Every Datalog program can be interpreted as a monotonic theory.
Решающие
В таблице ниже приведены некоторые характеристики многих доступных решений SMT. В графе "SMT LIB" указывается совместимость с языком SMT LIB; многие системы, помеченные "да", могут поддерживать только более старые версии SMT LIB или предлагать только частичную поддержку языка. В графе "CVC" указана поддержка языка CVC (Cooperating Validity Checker). В графе "DIMACS" указана поддержка формата DIMACS. Проекты отличаются не только особенностями и производительностью, но и жизнеспособностью окружающего сообщества, его постоянным интересом к проекту и его способностью вносить документы, исправления, испытания и улучшения. реляционные модели C++, Scheme, Python без изоморфизма подграфов OpenSMT Linux, Mac OS, Windows GPLv3 пустая теория, различия, линейная арифметика, битвекторы C++ 2011 ленивый SMT SolverraSATLinuxGPLv3v2.0реальная и целочисленная нелинейная арифметика2014, 2015расширение распространения интервала ограничений с тестированием и теорема промежуточных значений SatEEn ? Линейная арифметика, логика различий нет 2009 SMTInterpol Linux, Mac OS, Windows LGPLv3 неинтерпретированные функции, линейная реальная арифметика и линейная арифметика целых чисел Java 2012 Сосредоточен на генерации высококачественных, компактных интерполантов. SMCHR Linux, Mac OS, Windows GPLv3 линейная арифметика, нелинейная арифметика, кучи C no Может реализовать новые теории с использованием правил обработки ограничений. SMT RAT Linux, Mac OS MIT линейная арифметика, нелинейная арифметика C++ 2015 Инструментарий для стратегического и параллельного решения SMT, состоящий из коллекции реализаций, соответствующих SMT. SONOLAR Linux, Windows Проприетарные битвекторы C 2010 SAT на основе решений Spear Linux, Mac OS, Windows Проприетарные битвекторы 2008 STP Linux, OpenBSD, Windows, Mac OS MIT битвекторы, массивы C, C++, Python, OCaml, Java 2011 SAT на основе решений SWORD Linux Проприетарные битвекторы 2009 UCLID Linux BSD пустая теория, линейная арифметика, битвекторы и ограниченная ламбда (массивы, память, кэш и т. д.) не основанный на решителе SAT, написанный на московском ML. Язык ввода - SMV-модель проверки. Хорошо задокументировано! veriT Linux, OS X BSD теория пустоты, рациональная и целочисленная линейная арифметика, количественные показатели и равенство по отношению к неинтерпретированным символам функций C/C++ 2010 SAT на основе решителя, может производить доказательства Linux, Mac OS, Windows, FreeBSD GPLv3 рациональная и целочисленная линейная арифметика, битвекторы, массивы и равенство по отношению к неинтерпретированным символам функций C 2014 Исходный код доступен онлайн Z3 Теорема Провор Linux, Mac OS, Windows, FreeBSD MIT теория пустоты, линейная арифметика, нелинейная арифметика, битвекторы, массивы, типы данных, количественные показатели, строки C/C++, NET, OCaml, Python, Java, Haskell 2011 Исходный код доступен онлайн
Стандартизация и конкуренция в области SMT-COMP
Существует несколько попыток описать стандартизированный интерфейс для решителей SMT (и автоматических доказывающих теорем, термин, часто используемый синонимично). Наиболее известным является стандарт SMT LIB, который обеспечивает язык, основанный на S-выражениях. Другие стандартные форматы, которые обычно поддерживаются, - это формат DIMACS, поддерживаемый многими булевыми решителями SAT, и формат CVC, используемый автоматизированным проверяющим теоремы CVC. Формат SMT LIB также содержит ряд стандартизированных эталонов и позволил ежегодно проводить соревнования между решителями SMT под названием SMT COMP. Первоначально конкурс проходил во время конференции по компьютерной верификации (CAV), но с 2020 года конкурс проводится в рамках SMT Workshop, которая связана с Международной совместной конференцией по автоматизированному рассуждению (IJCAR).
Приложения
Решатели SMT полезны как для проверки, доказывания правильности программ, тестирования программного обеспечения на основе символического выполнения, так и для синтеза, генерирования фрагментов программы путем поиска в пространстве возможных программ. Помимо проверки программного обеспечения, SMT-решения также использовались для вывода типов и моделирования теоретических сценариев, включая моделирование убеждений актера в контроле над ядерными вооружениями.
Анализ и тестирование на основе символического исполнения
Важным применением SMT-решателей является символическое выполнение для анализа и тестирования программ (например, конколическое тестирование), направленное, в частности, на поиск уязвимостей безопасности. Примеры инструментов в этой категории включают SAGE от Microsoft Research, KLEE, S2E и Triton. СМТ-решения, которые использовались для приложений символического исполнения, включают Z3, STP, семейство решений Z3str и Boolector.
Доказательство теоремы
Решающие SMT были интегрированы с помощниками проверки, включая Coq и Isabelle/HOL.