Пряме зменшення 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 -Сайт екземпляр ...)

EDIT: Виходячи з відповіді храповика, зараз зрозуміло, що зниження до 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 повинен мати "пропозиції"?
Jeffε

6
У запитанні було сказано: "Я навіть був би задоволений прямим скороченням спеціального випадку n-SAT"
Ryan Williams

Так, це працює! Я думаю, я повинен був би подумати трохи ретельніше, перш ніж додати цей останній рядок, але якщо я не отримаю відповіді на більш загальне питання, я прийму це.
Микола

1
@Mikola Можливо, перетворення Цеїтіна чи Плейстера-Грінбаума дають 3CNF? (Я не зовсім впевнений, що розумію питання цілком :))
Mikolas

Мені було цікаво, чому розширення спеціально для k = 1, згаданого храповиком, не з’являється в жодній книзі (принаймні в тих, на які я натрапив поки що). Моє міркування полягає в тому, що буквальне значення за визначенням може бути «не a1», яке не може бути розширено, як {a1, a1, a1}. З іншого боку, ви не можете робити {'not a1', 'not a1', 'not a1]}, оскільки для її визначення потрібна інша логіка, щоб визначити, чи містить оригінал sat заперечне буквальне чи ні. Це причина (імовірно), що всі автори, включаючи Майкла Р. Гарі та Девіда С. Джонсона, використовували інше розширення, представлене "Карлосом Лінаресом Лопесом" у своїй посаді.
KGhatak


19

Якщо вам потрібно зменшити з k-SAT до 3-SAT, відповідь храповика працює добре.

Якщо ви хочете прямого скорочення від загальної формули пропозиції до CNF (і до 3-SAT), то, принаймні, з точки зору "SAT вирішує" - я думаю, що відповідь на ваше запитання Що таке "найприродніше" зменшення ... ? , є: Не існує "природного" зменшення !

З висновків глави 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, zn}

1
@TayfunPay Чи можете ви пояснити, чому ви вважаєте це рішення більш правильним? Дублювання змінних здається мені більш природним і не порушує жодного визначення 3SAT, яке я бачив. Чи є якась технічність, яка робить це рішення кращим?
крокея
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.