В логике и информатике алгоритм Дэвиса – Патнэма–Логемана–Лавленда ( DPLL ) представляет собой полный алгоритм поиска с возвратом для определения выполнимости формул пропозициональной логики в конъюнктивной нормальной форме , то есть для решения задачи CNF-SAT .
Он был представлен в 1961 году Мартином Дэвисом , Джорджем Логеманом и Дональдом У. Лавлендом и является усовершенствованием более раннего алгоритма Дэвиса–Патнэма , который представляет собой процедуру на основе разрешения, разработанную Дэвисом и Хилари Патнэм в 1960 году. Особенно в старых публикациях алгоритм Дэвиса–Логемана–Лавленда часто называют «методом Дэвиса–Патнэма» или «алгоритмом DP». Другие распространенные названия, которые поддерживают различие, — это DLL и DPLL.
Задача SAT важна как с теоретической, так и с практической точки зрения. В теории сложности это была первая задача, которая оказалась NP-полной и может появляться в широком спектре приложений, таких как проверка моделей , автоматизированное планирование и составление расписаний , а также диагностика в искусственном интеллекте .
Таким образом, написание эффективных решателей SAT было темой исследований в течение многих лет. GRASP (1996-1999) был ранней реализацией с использованием DPLL. [1] На международных соревнованиях SAT реализации, основанные на DPLL, такие как zChaff [2] и MiniSat [3], заняли первые места в соревнованиях в 2004 и 2005 годах. [4]
Другим приложением, которое часто использует DPLL, является автоматизированное доказательство теорем или выполнимость теорий по модулю (SMT), представляющая собой задачу SAT, в которой пропозициональные переменные заменяются формулами другой математической теории .
Базовый алгоритм обратного отслеживания работает путем выбора литерала, присвоения ему значения истинности , упрощения формулы и последующей рекурсивной проверки, является ли упрощенная формула выполнимой; если это так, то исходная формула выполнима; в противном случае выполняется та же рекурсивная проверка, предполагающая противоположное значение истинности. Это известно как правило разделения , поскольку оно разделяет задачу на две более простые подзадачи. Шаг упрощения по сути удаляет все предложения, которые становятся истинными при присвоении из формулы, и все литералы, которые становятся ложными из оставшихся предложений.
Алгоритм DPLL превосходит алгоритм обратного отслеживания за счет активного использования следующих правил на каждом шаге:
Невыполнимость данного частичного назначения обнаруживается, если одно предложение становится пустым, т. е. если все его переменные были назначены таким образом, что соответствующие литералы становятся ложными. Выполнимость формулы обнаруживается либо когда все переменные назначаются без создания пустого предложения, либо, в современных реализациях, если все предложения удовлетворены. Невыполнимость полной формулы может быть обнаружена только после исчерпывающего поиска.
Алгоритм DPLL можно обобщить в следующем псевдокоде, где Φ — формула CNF :
Алгоритм DPLL Входные данные: набор предложений Φ. Выходные данные: истинностное значение, указывающее, является ли Φ выполнимым.
функция DPLL (Φ) // распространение единицы: в то время как в Φ есть единичное предложение { l }, делаем Φ ← единичное распространение ( l , Φ); // чисто буквальное исключение: в то время как существует литерал l , который встречается в чистом виде в Φ do Φ ← чистый-литерал-присвоить ( l , Φ); // условия остановки: если Φ пусто, то вернуть true; если Φ содержит пустое предложение, то вернуть false; // Процедура DPLL: l ← литерал выбора (Φ); вернуть DPLL (Φ ∧ {l}) или DPLL (Φ ∧ {¬l});
В этом псевдокоде unit-propagate(l, Φ)
и pure-literal-assign(l, Φ)
являются функциями, которые возвращают результат применения единичного распространения и правила чистого литерала соответственно к литералу l
и формуле Φ
. Другими словами, они заменяют каждое вхождение l
на "true" и каждое вхождение not l
на "false" в формуле Φ
и упрощают полученную формулу. Оператор or
in в return
выражении является оператором короткого замыкания . обозначает упрощенный результат замены "true" на in .Φ ∧ {l}
l
Φ
Алгоритм завершается в одном из двух случаев. Либо формула CNF Φ
пуста, т. е. не содержит ни одного предложения. Тогда она удовлетворяется любым присваиванием, поскольку все ее предложения являются пустословно истинными. В противном случае, когда формула содержит пустое предложение, предложение является пустословно ложным, поскольку дизъюнкция требует, чтобы хотя бы один член был истинным для того, чтобы весь набор был истинным. В этом случае существование такого предложения подразумевает, что формула (оцениваемая как конъюнкция всех предложений) не может быть оценена как истинная и должна быть невыполнимой.
Функция псевдокода DPLL возвращает только то, удовлетворяет ли окончательное присваивание формуле или нет. В реальной реализации частично удовлетворяющее присваивание обычно также возвращается в случае успеха; это можно вывести, отслеживая литералы ветвления и литеральные присваивания, сделанные во время распространения единиц и чистого устранения литералов.
Алгоритм Дэвиса–Логеманна–Лавленда зависит от выбора литерала ветвления , который является литералом, рассматриваемым на шаге возврата. В результате это не совсем алгоритм, а скорее семейство алгоритмов, по одному для каждого возможного способа выбора литерала ветвления. Эффективность сильно зависит от выбора литерала ветвления: существуют экземпляры, для которых время выполнения является постоянным или экспоненциальным в зависимости от выбора литералов ветвления. Такие функции выбора также называются эвристическими функциями или эвристиками ветвления. [5]
Этот алгоритм разработали Дэвис, Логеманн, Лавленд (1961). Некоторые свойства этого оригинального алгоритма:
Пример визуализации алгоритма DPLL с хронологическим возвратом:
С 1986 года (упрощенно упорядоченные) бинарные диаграммы решений также использовались для решения SAT. [ необходима ссылка ]
В 1989-1990 годах был представлен и запатентован метод Столмарка для проверки формул. Он нашел некоторое применение в промышленных приложениях. [6]
DPLL был расширен для автоматизированного доказательства теорем для фрагментов логики первого порядка с помощью алгоритма DPLL(T) . [1]
В десятилетии 2010-2019 годов работа по улучшению алгоритма нашла лучшие политики для выбора литералов ветвления и новых структур данных, чтобы сделать алгоритм быстрее, особенно часть распространения единиц . Однако главным улучшением стал более мощный алгоритм, Conflict-Driven Clause Learning (CDCL), который похож на DPLL, но после достижения конфликта «изучает» первопричины (назначения переменным) конфликта и использует эту информацию для выполнения нехронологического возврата (также известного как backjumping ), чтобы избежать повторного достижения того же конфликта. Большинство современных решателей SAT основаны на фреймворке CDCL по состоянию на 2019 год. [7]
Запуски алгоритмов на основе DPLL на невыполнимых примерах соответствуют доказательствам опровержения разрешения дерева . [8]
Общий
Специфический