Riduzione diretta da SAT a 3-SAT


18

Qui l'obiettivo è ridurre un problema SAT arbitrario a 3-SAT in tempo polinomiale usando il minor numero di clausole e variabili. La mia domanda è motivata dalla curiosità. Meno formalmente, vorrei sapere: "Qual è la riduzione" più naturale "da SAT a 3-SAT?"

Ora la riduzione che ho sempre visto nei libri di testo è simile a questa:

  1. Per prima cosa prendi la tua istanza di SAT e applica il teorema di Cook-Levin per ridurlo al circuito SAT.

  2. Quindi finisci il lavoro con la riduzione standard del circuito SAT a 3-SAT sostituendo cancelli con clausole.

Mentre funziona, le risultanti clausole 3-SAT finiscono per apparire quasi nulla come le clausole SAT con cui hai iniziato, a causa dell'applicazione iniziale del teorema di Cook-Levin.

Qualcuno può vedere come effettuare la riduzione più direttamente, saltando il passaggio del circuito intermedio e andando direttamente al 3-SAT? Sarei anche felice di una riduzione diretta nel caso speciale di n-SAT.

(Immagino che ci siano alcuni compromessi tra il tempo di calcolo e la dimensione dell'output. Chiaramente una soluzione degenerata - sebbene fortunatamente inammissibile a meno che P = NP - sarebbe quella di risolvere semplicemente il problema SAT, quindi emettere un banale 3 -Istanza SAT ...)

EDIT: Sulla base della risposta di Ratchet, è chiaro ora che la riduzione a n-SAT è in qualche modo banale (e che avrei dovuto davvero pensarlo uno con un po 'più di attenzione prima di pubblicare). Lascio questa domanda aperta per un po 'nel caso in cui qualcuno conosca la risposta alla situazione più generale, altrimenti accetterò semplicemente la risposta di Ratchet.


7
Non capisco l'uso di Cook-Levin in (1). Boolean-formula-SAT non è già un caso speciale di circuito-SAT in cui la struttura grafica del circuito sembra essere un albero?
Luca Trevisan,

Risposte:


28

Ogni clausola SAT ha 1, 2, 3 o più variabili. La clausola delle 3 variabili può essere copiata senza problemi

Le clausole variabili 1 e 2 {a1}e {a1,a2}possono essere espanse in {a1,a1,a1}e {a1,a2,a1}rispettivamente.

La clausola con più di 3 variabili {a1,a2,a3,a4,a5}può essere espansa {a1,a2,s1}{!s1,a3,s2}{!s2,a4,a5}con s1e s2nuove variabili il cui valore dipenderà da quale variabile nella clausola originale è vera


6
Attento. Chi dice che l'input per SAT deve avere "clausole"?
Jeffε

6
La domanda diceva "Sarei anche felice di una riduzione diretta del caso speciale di n-SAT"
Ryan Williams,

Sì, funziona! Immagino che avrei dovuto pensarci un po 'più attentamente prima di aggiungere l'ultima riga, ma se non avrò una risposta alla domanda più generale accetterò questo.
Mikola,

1
@Mikola Forse la trasformazione Tseitin o Plaisted-Greenbaum ti dà 3CNF? (Non sono del tutto sicuro di aver compreso appieno la domanda :))
Mikolas,

Mi chiedevo perché l'estensione specificatamente per k = 1 menzionata da Ratchet non fosse presente in nessun libro (almeno quelli che ho incontrato finora). Il mio ragionamento è che per definizione un letterale potrebbe essere "non a1" che non può essere esteso come {a1, a1, a1}. D'altra parte, non puoi fare {'non a1', 'non a1', 'non a1]} in quanto ha bisogno di un'altra logica per identificare se l'originale sat include un letterale negato o no. Questo è il motivo (presumibilmente) che tutti gli autori, tra cui Michael R. Garey e David S. Johnson, hanno usato una diversa estensione presentata da "Carlos Linares López" nel suo post qui.
KGhatak,


19

Se hai bisogno di una riduzione da k-SAT a 3-SAT, la risposta di Ratchet funziona bene.

Se vuoi una riduzione diretta dalla formula proposizionale generica al CNF (e al 3-SAT), allora - almeno dal punto di vista dei solutori SAT - Penso che la risposta alla tua domanda Qual è la riduzione "più naturale" ... ? , è: non esiste una riduzione "naturale" !

Dalle conclusioni del capitolo 2 - "CNF Encodings" del (ottimo) libro: Manuale di soddisfazione :

...
Di solito ci sono molti modi per modellare un determinato problema nel CNF e sono note poche linee guida per la scelta tra loro. Esiste spesso una scelta di funzioni problematiche da modellare come variabili e alcune potrebbero prendere in considerazione considerevoli scoperte. Le codifiche di tseitina sono compatte e meccanizzabili, ma in pratica non sempre portano al modello migliore e alcune sottformule potrebbero essere espanse meglio. Alcune clausole possono essere omesse da considerazioni di polarità e possono essere aggiunte clausole implicite, di rottura della simmetria o bloccate. Codifiche diverse possono avere diversi vantaggi e svantaggi come dimensioni o densità della soluzione, e ciò che è un vantaggio per un solutore SAT potrebbe essere uno svantaggio per un altro. In breve, la modellistica CNF è un'arte e spesso dobbiamo procedere per intuizione e sperimentazione.
...

L'algoritmo più noto è l' algoritmo Tseitin (G. Tseitin. Sulla complessità della derivazione nel calcolo proposizionale. Automazione del ragionamento: Carte classiche nella logica computazionale, 2: 466–483, 1983. Springer-Verlag.)

Per una buona introduzione alle codifiche CNF, leggi il manuale suggerito o Soddisfazione . Puoi anche leggere alcuni lavori recenti e guardare i riferimenti; per esempio:

  • P. Jackson e D. Sheridan. Conversioni di moduli di clausole per circuiti booleani. In HH Hoos e DG Mitchell, editori, Theory and Applications of Satisfiability Testing, 7th International Conference, SAT 2004 , volume 3542 of LNCS, pagine 183-198. Springer, 2004. (che mira a ridurre il numero di clausole)
  • P. Manolios, D. Vroon, conversione efficiente da circuito a CNF. In Theory and Applications of Satisfiability Testing - SAT 2007 (2007), pagg. 4-9

15

Consentitemi di pubblicare un'altra soluzione simile a quella di Ratchel ma in qualche modo diversa. Questo è tratto direttamente dal capitolo 9 della 2a edizione di "The Algorithm Design Manual" di Steven Skiena

  • Se la clausola ha solo un letterale C = {z1}, quindi crea due nuove variabili v1 e v2 e quattro nuove clausole da 3 litri: {v1, v2, z1}, {! V1, v2, z1}, {v1,! v2, z1} e {! v1,! v2, z1}. Si noti che l'unico modo in cui tutte e quattro queste clausole possono essere soddisfatte contemporaneamente è se z1 = T, il che significa anche che la C originale sarà soddisfatta
  • Se la clausola ha due valori letterali, C = {z1, z2}, quindi crea una nuova variabile v1 e due nuove clausole: {v1, z1, z2} e {! V1, z1, z2}. Ancora una volta, l'unico modo per soddisfare entrambe queste clausole è avere almeno una di z1 e z2 vera, soddisfacendo così C
  • Se la clausola ha tre valori letterali, C = {z1, z2, z3}, basta copiare C nell'istanza 3-SAT invariata
  • Se la clausola ha più di 3 letterali C = {z1, z2, ..., zn}, quindi crea n-3 nuove variabili e n-2 nuove clausole in una catena, dove per 2 <= j <= n-2 , Cij = {v1, j-1, zj + 1,! Vi, j}, Ci1 = {z1, z2,! Vi, 1} e Ci, n-2 = {vi, n-3, zn-1, zn}

1
@TayfunPay Puoi spiegare perché ritieni che questa soluzione sia più corretta? La duplicazione delle variabili mi sembra più naturale e non viola alcuna definizione di 3SAT che ho visto. C'è qualche tecnicismo che rende migliore questa soluzione?
crockeea,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.