Прямое снижение SAT до 3-SAT

18

Здесь цель состоит в том, чтобы свести произвольную задачу SAT к 3-SAT за полиномиальное время, используя наименьшее количество предложений и переменных. Мой вопрос мотивирован любопытством. Менее формально я хотел бы знать: «Каково« наиболее естественное »сокращение с SAT до 3-SAT?»

Теперь сокращение, которое я всегда видел в учебниках, выглядит примерно так:

  1. Сначала возьмите свой экземпляр SAT и примените теорему Кука-Левина, чтобы свести его к схеме SAT.

  2. Затем вы заканчиваете работу стандартным сокращением схемы SAT до 3-SAT, заменяя вентили пунктами.

Несмотря на то, что это работает, полученные 3-SAT-предложения в итоге выглядят почти не похожими на SAT-предложения, с которыми вы начинали, из-за первоначального применения теоремы Кука-Левина.

Может кто-нибудь увидеть, как сделать сокращение более непосредственно, пропуская шаг промежуточного контура и переходя непосредственно к 3-SAT? Я бы даже был рад прямому сокращению в особом случае n-SAT.

(Я бы предположил, что есть некоторые компромиссы между временем вычислений и размером выходных данных. Ясно, что вырожденное - хотя, к счастью, недопустимое, если P = NP - решение будет состоять в том, чтобы просто решить проблему SAT, а затем создать тривиальную задачу 3). -SAT экземпляр ...)

РЕДАКТИРОВАТЬ: Исходя из ответа храповика, теперь ясно, что сокращение до n-SAT несколько тривиально (и что я действительно должен был подумать, что один из них немного более тщательно, прежде чем публиковать). Я оставляю этот вопрос открытым, если кто-то знает ответ на более общую ситуацию, иначе я просто приму ответ храповика.

Микола
источник
7
Я не понимаю использование Кука-Левина в (1). Разве логическая формула-SAT уже не является частным случаем схемы-SAT, в которой графовая структура схемы оказывается деревом?
Лука Тревизан

Ответы:

28

Каждое предложение SAT имеет 1, 2, 3 или более переменных. Предложение 3 переменных может быть скопировано без проблем

1 и 2 переменные предложения {a1}и {a1,a2}могут быть расширены до {a1,a1,a1}и {a1,a2,a1}соответственно.

Раздел с более чем 3 -х переменных {a1,a2,a3,a4,a5}может быть расширена до {a1,a2,s1}{!s1,a3,s2}{!s2,a4,a5}с s1и s2новые переменные, значение которых будет зависеть от того, какая переменная в исходном пункте верно

чокнутый урод
источник
6
Осторожный. Кто сказал, что для ввода в SAT должны быть «пункты»?
Джеффс
6
В вопросе говорилось: «Я бы даже был рад прямому сокращению в особом случае n-SAT»
Райан Уильямс
Да, это работает! Я думаю, что я должен был подумать немного более тщательно, прежде чем добавить эту последнюю строку, но если я не получу ответ на более общий вопрос, я приму это.
Микола
1
@Mikola Может быть, преобразование Цейтин или Плейстед-Гринбаум даст вам 3CNF? (Я не совсем уверен, что полностью понимаю вопрос :))
Миколас
Мне было интересно, почему расширение, специально для k = 1, упомянутое храповиком, не встречается ни в одной книге (по крайней мере, тех, с которыми я сталкивался до сих пор). Я рассуждаю так: по определению литерал может быть «не a1», который не может быть расширен как {a1, a1, a1}. С другой стороны, вы не можете сделать {'не a1', 'не a1', 'not a1]}, так как для этого требуется другая логика, чтобы определить, содержит ли исходный sat отрицательный литерал или нет. По этой причине (предположительно) все авторы, включая Майкла Р. Гэри и Дэвида С. Джонсона, использовали другое расширение, представленное «Карлосом Линаресом Лопесом» в его / ее посте здесь.
К.Гхатак
19

Если вам нужно сокращение от k-SAT до 3-SAT, то ответ храповика работает нормально.

Если вы хотите прямое сокращение от общей формулы высказываний до CNF (и до 3-SAT), тогда - по крайней мере, с точки зрения «SAT solvers» - я думаю, что ответ на ваш вопрос Что такое «наиболее естественное» сокращение ... ? , это: нет «естественного» сокращения !

Из выводов главы 2 - «Кодировки CNF» (очень хорошей) книги: Справочник по удовлетворенности :

...
Как правило, существует множество способов смоделировать данную проблему в CNF, и известно мало рекомендаций по их выбору. Часто существует выбор проблемных характеристик для моделирования в качестве переменных, и некоторые могут потребовать значительных усилий для их обнаружения. Кодировки Цейтина компактны и механизированы, но на практике не всегда приводят к лучшей модели, и некоторые субформулы могут быть лучше расширены. Некоторые пункты могут быть исключены из соображений полярности, и подразумевается, что могут быть добавлены нарушения симметрии или блокированные предложения. Разные кодировки могут иметь разные преимущества и недостатки, такие как размер или плотность раствора, а то, что является преимуществом для одного SAT-решателя, может быть недостатком для другого. Короче говоря, моделирование CNF - это искусство, и мы часто должны исходить из интуиции и экспериментов.
...

Наиболее известным алгоритмом является алгоритм Цейтина (Г. Цейтин. О сложности вывода в исчислении высказываний. Автоматизация рассуждений: Классические статьи в вычислительной логике, 2: 466–483, 1983. Springer-Verlag.)

Для хорошего ознакомления с кодировками CNF прочитайте предлагаемую книгу « Справочник по удовлетворенности» . Вы также можете прочитать некоторые недавние работы и посмотреть ссылки; например:

  • П. Джексон и Д. Шеридан. Преобразование формы предложения для булевых схем. В HH Hoos и DG Mitchell, редакторы, « Теория и приложения тестирования удовлетворенности», 7-я Международная конференция, SAT 2004 , том 3542 LNCS, страницы 183–198. Springer, 2004. (который направлен на сокращение количества статей)
  • П. Манолиос, Д. Врун, Эффективное преобразование схемы в CNF. В теории и приложениях тестирования удовлетворенности - SAT 2007 (2007), с. 4-9
Марцио де Биаси
источник
15

Позвольте мне опубликовать другое решение, похожее на решение Рэтчела, но несколько иное. Это непосредственно взято из главы 9 второго издания «Руководства по разработке алгоритмов» Стивена Скиены

  • Если в предложении есть только один литерал C = {z1}, то создайте две новые переменные v1 и v2 и четыре новых 3-литеральных предложения: {v1, v2, z1}, {! V1, v2, z1}, {v1,! v2, z1} и {! v1,! v2, z1}. Обратите внимание, что единственный способ, которым все четыре из этих предложений могут быть выполнены одновременно, это если z1 = T, что также означает, что исходный C будет удовлетворен
  • Если в предложении есть два литерала, C = {z1, z2}, то создайте одну новую переменную v1 и два новых предложения: {v1, z1, z2} и {! V1, z1, z2}. Опять же, единственный способ удовлетворить оба эти условия состоит в том, чтобы по крайней мере один из z1 и z2 был истинным, таким образом удовлетворяя C
  • Если в предложении есть три литерала, C = {z1, z2, z3}, просто скопируйте C в экземпляр 3-SAT без изменений
  • Если предложение содержит более 3 литералов C = {z1, z2, ..., zn}, то создайте n-3 новых переменных и n-2 новых предложения в цепочке, где для 2 <= j <= n-2 , Cij = {v1, j-1, zj + 1,! Vi, j}, Ci1 = {z1, z2,! Vi, 1} и Ci, n-2 = {vi, n-3, zn-1, гп}
Карлос Линарес Лопес
источник
1
@TayfunPay Можете ли вы объяснить, почему вы считаете это решение более правильным? Дублирование переменных кажется мне более естественным и не нарушает никакого определения 3SAT, которое я видел. Есть ли какая-то техническая составляющая, которая делает это решение лучше?
Crockeea