Pengurangan langsung SAT ke 3-SAT

18

Di sini tujuannya adalah untuk mengurangi masalah SAT sewenang-wenang menjadi 3-SAT dalam waktu polinomial menggunakan klausa dan variabel paling sedikit. Pertanyaan saya dimotivasi oleh rasa ingin tahu. Secara kurang formal, saya ingin tahu: "Apa pengurangan 'paling alami' dari SAT menjadi 3-SAT?"

Sekarang pengurangan yang selalu saya lihat di buku teks kira-kira begini:

  1. Pertama-tama ambil contoh SAT Anda dan terapkan teorema Cook-Levin untuk menguranginya ke sirkuit SAT.

  2. Kemudian Anda menyelesaikan pekerjaan dengan pengurangan standar sirkuit SAT menjadi 3-SAT dengan mengganti gerbang dengan klausa.

Sementara ini bekerja, klausa 3-SAT yang dihasilkan akhirnya tampak hampir tidak seperti klausa SAT yang Anda mulai, karena aplikasi awal teorema Cook-Levin.

Adakah yang bisa melihat bagaimana melakukan reduksi secara lebih langsung, melewatkan langkah rangkaian lanjutan dan langsung menuju 3-SAT? Saya bahkan akan senang dengan pengurangan langsung dalam kasus khusus n-SAT.

(Saya kira ada beberapa trade-off antara waktu komputasi dan ukuran output. Jelas merosot - walaupun untungnya tidak dapat diterima kecuali P = NP - solusi akan hanya menyelesaikan masalah SAT, kemudian memancarkan sepele 3 Contoh -SAT ...)

EDIT: Berdasarkan jawaban ratchet jelas sekarang bahwa pengurangan ke n-SAT agak sepele (dan bahwa saya benar-benar harus memikirkan satu melalui sedikit lebih hati-hati sebelum memposting). Saya membiarkan pertanyaan ini terbuka sedikit jika seseorang mengetahui jawaban untuk situasi yang lebih umum, jika tidak saya hanya akan menerima jawaban ratchet.

Mikola
sumber
7
Saya tidak mengerti penggunaan Cook-Levin dalam (1). Bukankah boolean-formula-SAT sudah menjadi kasus khusus dari sirkuit-SAT di mana struktur grafik dari rangkaian tersebut adalah pohon?
Luca Trevisan

Jawaban:

28

Setiap klausa SAT memiliki 1, 2, 3 atau lebih variabel. Klausa 3 variabel dapat disalin tanpa masalah

Klausa variabel 1 dan 2 {a1}dan {a1,a2}dapat diperluas ke {a1,a1,a1}dan{a1,a2,a1} masing masing.

Klausa dengan lebih dari 3 variabel {a1,a2,a3,a4,a5}dapat diperluas {a1,a2,s1}{!s1,a3,s2}{!s2,a4,a5}dengan s1dan s2variabel baru yang nilainya akan bergantung pada variabel mana dalam klausa asli yang benar

ratchet freak
sumber
6
Cermat. Siapa bilang input ke SAT harus memiliki "klausa"?
Jeffε
6
Pertanyaan itu mengatakan, "Saya bahkan akan senang dengan pengurangan langsung dalam kasus khusus n-SAT"
Ryan Williams
Yap, itu berhasil! Saya kira saya harus berpikir sedikit lebih hati-hati sebelum menambahkan baris terakhir, tetapi jika saya tidak mendapatkan jawaban untuk pertanyaan yang lebih umum saya akan menerimanya.
Mikola
1
@ Mikola Mungkin transformasi Tseitin atau Plaisted-Greenbaum memberi Anda 3CNF? (Saya tidak yakin saya mengerti pertanyaan sepenuhnya :))
Mikolas
Saya telah bertanya-tanya mengapa ekstensi khusus untuk k = 1 yang disebutkan oleh ratchet tidak muncul di buku mana pun (setidaknya yang saya temui sejauh ini). Alasan saya adalah bahwa menurut definisi literal bisa menjadi 'bukan a1' yang tidak dapat diperpanjang seperti {a1, a1, a1}. Di sisi lain, Anda tidak dapat melakukan {'not a1', 'not a1', 'not a1]} karena memerlukan logika lain untuk mengidentifikasi apakah sat asli menyertakan literasi yang dinegasikan atau tidak. Ini adalah alasan (mungkin) semua penulis termasuk Michael R. Garey dan David S. Johnson menggunakan ekstensi berbeda yang disajikan oleh 'Carlos Linares López' dalam posnya di sini.
KGhatak
27

nn

Bart Jansen
sumber
19

Jika Anda membutuhkan pengurangan dari k-SAT ke 3-SAT, maka jawaban ratchet berfungsi dengan baik.

Jika Anda ingin pengurangan langsung dari formula proposisional generik ke CNF (dan menjadi 3-SAT), maka - setidaknya dari "perspektif pemecah SAT" - Saya pikir jawaban untuk pertanyaan Anda Apa pengurangan 'paling alami' ... ? , adalah: Tidak ada pengurangan 'alami' !

Dari kesimpulan Bab 2 - "Penyandian CNF" dari buku (sangat bagus): Buku Pegangan Kepuasan :

...
Biasanya ada banyak cara untuk memodelkan masalah yang diberikan di CNF, dan beberapa pedoman diketahui memilih di antara mereka. Seringkali ada pilihan fitur masalah untuk dimodelkan sebagai variabel, dan beberapa mungkin perlu dipertimbangkan untuk menemukannya. Pengkodean tseitin bersifat kompak dan mekanis tetapi dalam praktiknya tidak selalu mengarah pada model terbaik, dan beberapa subformula mungkin lebih diperluas. Beberapa klausa dapat dihilangkan dengan pertimbangan polaritas, dan tersirat, klausa yang melanggar simetri atau diblokir dapat ditambahkan. Pengkodean yang berbeda mungkin memiliki kelebihan dan kekurangan yang berbeda seperti ukuran atau kepadatan solusi, dan apa keuntungan untuk satu pemecah SAT mungkin menjadi kerugian bagi yang lain. Singkatnya, pemodelan CNF adalah seni dan kita harus sering melanjutkan dengan intuisi dan eksperimen.
...

Algoritma yang paling dikenal adalah Tseitin (G. Tseitin. Pada kompleksitas derivasi dalam kalkulus proposisional. Otomatisasi Penalaran: Makalah Klasik dalam Logika Komputasi, 2: 466-483, 1983. Springer-Verlag.)

Untuk pengantar pengkodean CNF yang bagus, baca buku yang disarankan Handbook o Satisfiability . Anda juga dapat membaca beberapa karya terbaru dan melihat referensi; sebagai contoh:

  • P. Jackson dan D. Sheridan. Konversi bentuk klausa untuk sirkuit Boolean. Dalam HH Hoos dan DG Mitchell, editor, Teori dan Aplikasi Pengujian Kepuasan, Konferensi Internasional ke-7, SAT 2004 , volume 3542 LNCS, halaman 183–198. Springer, 2004. (yang bertujuan untuk mengurangi jumlah klausa)
  • P. Manolios, D. Vroon, Sirkuit Efisien menjadi Konversi CNF. Dalam Teori dan Aplikasi Pengujian Kepuasan - SAT 2007 (2007), hlm. 4-9
Marzio De Biasi
sumber
15

Izinkan saya memposting solusi lain yang mirip dengan Ratchel tetapi agak berbeda. Ini langsung diambil dari bab 9 Edisi 2 "The Algorithm Design Manual" oleh Steven Skiena

  • Jika klausa hanya memiliki satu literal C = {z1}, maka buat dua variabel baru v1 dan v2 dan empat klausa 3-literal baru: {v1, v2, z1}, {! V1, v2, z1}, {v1,! v2, z1} dan {! v1,! v2, z1}. Perhatikan bahwa satu-satunya cara agar keempat klausa ini dapat dipenuhi secara bersamaan adalah jika z1 = T, yang juga berarti C asli akan dipenuhi
  • Jika klausa memiliki dua literal, C = {z1, z2}, maka buat satu variabel baru v1 dan dua klausa baru: {v1, z1, z2} dan {! V1, z1, z2}. Sekali lagi, satu-satunya cara untuk memenuhi kedua klausa ini adalah memiliki setidaknya satu dari z1 dan z2 benar, sehingga memuaskan C
  • Jika klausa memiliki tiga literal, C = {z1, z2, z3}, cukup salin C ke instance 3-SAT yang tidak berubah.
  • Jika klausa memiliki lebih dari 3 literal C = {z1, z2, ..., zn}, maka buat n-3 variabel baru dan n-2 klausa baru dalam sebuah rantai, di mana untuk 2 <= j <= n-2 , Cij = {v1, j-1, zj + 1,! Vi, j}, Ci1 = {z1, z2,! Vi, 1} dan Ci, n-2 = {vi, n-3, zn-1, zn}
Carlos Linares López
sumber
1
@TayfunPay Bisakah Anda menjelaskan mengapa Anda menganggap solusi ini lebih benar? Variabel duplikat tampaknya lebih alami bagi saya, dan tidak melanggar definisi 3SAT yang pernah saya lihat. Apakah ada beberapa teknis yang membuat solusi ini lebih baik?
crockeea