Hier besteht das Ziel darin, ein beliebiges SAT-Problem in Polynomzeit unter Verwendung der geringsten Anzahl von Klauseln und Variablen auf 3-SAT zu reduzieren. Meine Frage ist von Neugierde motiviert. Weniger formal möchte ich wissen: "Was ist die 'natürlichste' Reduzierung von SAT auf 3-SAT?"
Die Reduktion, die ich in Lehrbüchern immer gesehen habe, sieht ungefähr so aus:
Nehmen Sie zuerst Ihre SAT-Instanz und wenden Sie den Cook-Levin-Satz an, um ihn auf die SAT-Schaltung zu reduzieren.
Anschließend beenden Sie den Job durch die Standardreduzierung des Schaltkreises SAT auf 3-SAT, indem Sie die Gatter durch Klauseln ersetzen.
Während dies funktioniert, sehen die resultierenden 3-SAT-Klauseln aufgrund der anfänglichen Anwendung des Cook-Levin-Theorems fast nicht so aus wie die SAT-Klauseln, mit denen Sie begonnen haben.
Kann jemand sehen, wie man die Reduzierung direkter vornimmt, den Zwischenkreis überspringt und direkt zu 3-SAT übergeht? Ich würde mich sogar über eine direkte Reduzierung des Sonderfalls von n-SAT freuen.
(Ich würde vermuten, dass es einige Kompromisse zwischen der Rechenzeit und der Größe der Ausgabe gibt. Es ist klar, dass eine entartete - wenn auch glücklicherweise unzulässige - Lösung darin besteht, nur das SAT-Problem zu lösen und dann eine triviale 3 auszugeben -SAT-Instanz ...)
EDIT: Basierend auf der Antwort von ratchet ist es jetzt klar, dass die Reduzierung auf n-SAT etwas trivial ist (und dass ich mir das vor dem Posten wirklich etwas genauer hätte überlegen sollen). Ich lasse diese Frage für den Fall offen, dass jemand die Antwort auf die allgemeinere Situation kennt, sonst akzeptiere ich einfach die Antwort der Ratsche.
quelle
Antworten:
Jede SAT-Klausel enthält 1, 2, 3 oder mehr Variablen. Die 3-Variablen-Klausel kann problemlos kopiert werden
Die 1 und 2 variable Klauseln
{a1}
und{a1,a2}
kann erweitert werden ,{a1,a1,a1}
und{a1,a2,a1}
jeweils.Die Klausel mit mehr als 3 Variablen
{a1,a2,a3,a4,a5}
kann{a1,a2,s1}{!s1,a3,s2}{!s2,a4,a5}
mits1
unds2
neuen Variablen erweitert werden, deren Wert davon abhängt, welche Variable in der ursprünglichen Klausel wahr istquelle
quelle
Wenn Sie eine Reduzierung von k-SAT auf 3-SAT benötigen, funktioniert die Antwort der Ratsche einwandfrei.
Wenn Sie eine direkte Reduktion von der allgemeinen Satzformel auf CNF (und auf 3-SAT) wünschen, dann denke ich, dass die Antwort auf Ihre Frage Was ist die "natürlichste" Reduktion ... ? ist: Es gibt keine "natürliche" Reduktion !
Aus den Schlussfolgerungen von Kapitel 2 - "CNF-Codierungen" des (sehr guten) Buches: Handbuch der Zufriedenheit :
...
Es gibt normalerweise viele Möglichkeiten, ein bestimmtes Problem in CNF zu modellieren, und es sind nur wenige Richtlinien für die Auswahl bekannt. Es gibt oft eine Auswahl von Problemmerkmalen, die als Variablen modelliert werden können, und einige müssen möglicherweise gründlich überlegt werden, um sie zu ermitteln. Tseitin-Codierungen sind kompakt und mechanisierbar, führen jedoch in der Praxis nicht immer zum besten Modell, und einige Teilformeln könnten besser erweitert werden. Einige Klauseln können aus Gründen der Polarität weggelassen werden, und implizite, symmetrische oder blockierte Klauseln können hinzugefügt werden. Unterschiedliche Kodierungen können unterschiedliche Vor- und Nachteile haben, wie z. B. Größe oder Lösungsdichte. Was für einen SAT-Solver von Vorteil ist, kann für einen anderen von Nachteil sein. Kurz gesagt, CNF-Modellierung ist eine Kunst, und wir müssen oft durch Intuition und Experimente vorgehen.
...
Der bekannteste Algorithmus ist der Tseitin-Algorithmus (G. Tseitin. Zur Komplexität der Herleitung in der Aussagenrechnung. Automation of Reasoning: Classical Papers in Computational Logic, 2: 466–483, 1983. Springer-Verlag.)
Für eine gute Einführung in die CNF-Codierung lesen Sie das vorgeschlagene Buch „ Handbuch zur Zufriedenheit“ . Sie können auch einige neuere Werke lesen und sich die Referenzen ansehen. beispielsweise:
quelle
Lassen Sie mich bitte eine andere Lösung posten, die der von Ratchel ähnelt, jedoch etwas anders ist. Dies ist direkt aus Kapitel 9 der 2. Ausgabe des "The Algorithm Design Manual" von Steven Skiena entnommen
quelle