Sei sulla pagina 1di 5

1 Teorema Cook-Levin

Nella teoria della complessità algoritmica, il teorema di Cook-Levin, afferma che


il problema di soddisfacibilità booleana è NP-completo.

1.1 NP Completo
Un problema decisionale appartiene ad NP se una macchina di Turing non de-
terministica può calcolare la soluzione in tempo polinomiale.
Un problema decisionale è NP-completo se appartiene a NP e se ogni problema
appartenente ad NP può essere ridotto ad esso in tempo polinomiale.
Un’istanza del problema di soddisfacibilità booleana è un’espressione booleana
che combina variabili booleane usando degli operatori booleani. Un’espressione
è soddisfacibile se c’è almeno un assegnamento di valori di verità alle variabili
tale che l’espressione sia vera.

2 Il Problema 3SAT
Il 3SAT è un problema decisionale di ”soddisfacibilità booleana” (logica binaria
o SAT), dove si vogliono trovare le soluzioni di una funzione logica, costituita
da AND di clausole, dove una clausola è però costituita da due OR di 3 letterali
e in gioco vi sono n variabili con n>3. In altri termini ad esempio per n=4
variabili A1,A2,A3,A4 abbiamo clausole costituite dall’OR con sole 3 variabili
(o combinazioni di NOT e/o variabili) e tutte le clausole scelte sono poi in AND.
Le soluzioni sono tutte quelle ottenute, tenendo conto dei valori assunti dalle
variabili (condizioni iniziali), mettendo prima in OR i valori di 3 letterali di una
clausola e infine mettendo in AND le varie clausole assegnate, e che compor-
tano alla fine che la funzione logica valga TRUE. Le clausole si dicono in forma
normale congiuntiva ( CNF ). Ciò comporta che:
1) può esistere o meno la soluzione costituita da tutte le variabili (esistono delle
clausole che vanno scartate o che se usate comportano che la funzione logica
dà come risultato FALSE). Ad esempio supponiamo il problema n=4, alcune
soluzioni non utili per la funzione sono:
A1 A2 A3 A4
FUNZIONE LOGICA
FALSE PER LA SOLUZIONE
1 1 1 1 AND(OR(OR(NOT(A1),NOT(A2)),NOT(A3)),OR(OR(A1,A2),A4) 0 0
1 0 AND(OR(OR(A1,A2),A3),OR(OR(A1,A2),A4))
A1 A2 A3 A4
FUNZIONE LOGICA
TRUE PER LA SOLUZIONE
0 0 0 1 AND(OR(OR(NOT(A1),NOT(A2)),NOT(A3)),OR(OR(A1,A2),A4)
Ovviamente la stessa funzione per una configurazione di valori dei letterali
risulta falsa e per un’altra vera; in altri casi può essere addirittura sempre falsa,

1
ovvero non ammette soluzione. Per cui sono possibili vari tipi di problemi:
a) assegnata la funzione logica trovare le soluzioni
b) assegnata una soluzione quali clausole devono essere scartate per non dare
FALSE nella funzione logica
c) se è possibile minimizzare la funzione logica in taluni casi, il che vuol dire che
alcune clausole potrebbero essere ininfluenti o che la funzione logica è invariante
rispetto a inserire o togliere certe clausole. In sostanza sono, quindi, importanti
le minimizzazioni della funzione logica e l’esistenza della soluzione. In generale
esistono molti metodi di minimizzazione tra cui quello degli Implicanti primi (
Quine-McCluskey ) o più semplicemente le mappe di Karnaugh .
Le mappe di Karnaugh hanno un limite di utilizzabilità pratica appena il nu-
mero dei letterali in gioco supera 4-5 diventano poco facili a gestirsi; mentre
il metodo degli implicanti Primi (vedi [1]) gestisce meglio n variabili, ma risol-
vendo un problema NP-difficile il tempo di esecuzione è esponenziale al crescere
dei letterali.
L’interesse per i pro blemi SAT, 2SAT, 3SAT è nato col Teorema di Cook e
Levin (vedi [4]), che afferma che il problema della soddisfacibilità booleana è
NP-complete. Il che vuol dire che un problema in NP può essere ridotto in un
tempo polinomiale con una macchina di Turing deterministica se una formula
booleana è soddisfacibile. SAT fu proprio il primo problema che fu dimostrato
da Cook come NP-difficile. Ovviamente ne esistono molti altri problemi come
quello dello zaino, etc.

3 Dimostrazione Teorema Di Cook


Si dimostra che il funzionamento di una macchina di Turing si può simulare
tramite formule booleane in forma normale congiuntiva. Intuitivamente le op-
erazioni di un calcolatore binario (che è Turing Completo o Turing equivalente)
possono essere viste come delle formule booleane in forma normale congiuntiva
(questo è dovuto all’architettura dei calcolatori). Si dimostra in maniera banale
che ogni formula booleana può essere trasformata in tempo polinomiale in una
formula booleana equivalente in forma normale congiuntiva. Ogni problema
che può essere risolto tramite una macchina di Turing può essere tramutato in
una formula booleana e quindi il problema di soddisfacibilità booleana è NP-
completo.

3.1 SAT appartiene ad NP


SAT appartiene ad NP, perché esiste una macchina di Turing non deterministica
che può decidere tutti i problemi in SAT. Questa macchina effettua in modo non
deterministico tutte le assegnazioni possibili alla formula booleana, se almeno
una delle assegnazioni soddisfa la formula booleana, la macchina accetta.

2
3.2 Ogni linguaggio in NP è riducibile a SAT in tempo
polinomiale
Usiamo una tabella per codificare tutti gli stati di un ramo di una computazione
di una macchina non deterministica. Quindi l’alfabeto dei simboli che com-
paiono nella tabella è:
C = Q ∪ Γ ∪ { ]}
Visto che ogni ramo di computazione può avere al più tempo polinomiale, sap-
piamo che gli stati possibili all’interno di questo ramo sono al più nk configu-
razioni. Quindi è possibile creare una tabella avente nk righe ed nk colonne, di
cui ogni riga rappresenta una configurazione del ramo di computazione.
Ogni riga di questa tabella contiene il contenuto del nastro della macchina di
Turing e lo stato corrente, messo prima del simbolo su cui la macchina punta
attualmente. Inoltre, il simbolo ] rappresenta l’inizio e la fine di ogni stringa ed
il simbolo rappresenta una cella vuota. Ad esempio, una configurazione iniziale
conterrà i simboli:
], q0 , w0 , w1 , ..., wn ,, ...,, ]
E se la testina dovesse spostarsi in avanti, si avrebbe la stringa:
], w0 , q0 , w1 , ..., wn ,, ...,, ]
È possibile creare un insieme di formule booleane che verifichino determinate
condizioni di questa tabella:
-ad ogni cella è associato un ed un solo simbolo;
-la prima riga della tabella rappresenta la configurazione iniziale;
-ogni transizione da una riga alla riga successiva è valida;
-almeno una riga della tabella rappresenta uno stato di accettazione.
La formula finale sarà la congiunzione di queste quattro formule:
φ = φcell ∧ φstart ∧ φmove ∧ φaccept φ = φcell ∧ φstart ∧ φmove ∧ φaccept
Detto questo, bisogna dimostrare due cose:
-è effettivamente possibile generare una formula booleana di lunghezza polino-
miale dalla congiunzione delle formule di cui sopra;
. -una assegnazione di tale formula rappresenta un ramo di computazione che
accetti

3.3 Ad ogni cella è associato uno ed un solo simbolo


Introduciamo le variabili booleane xi,j,s xi,j,s che hanno valore ”vero” se la cella
nella riga i e nella colonna j contiene il simbolo s, ”falso” altrimenti.
La formula che verifica
 che ad ogni cella sia associato una ed un solo simbolo è:
!  
^ _ ^
φcell =  xi,j,s ∧  (xi,j,s ∨ xi,j,t )
1≤i,j≤nk s∈C s,t∈C;s6=t
La formula ci sta dicendo che per ogni cella, corrispondente alla riga i ed alla
colonna j, dobbiamo verificare due cose:

-nella cella c’è almeno un simbolo;


-in nessuna cella c’è più di un simbolo.

3
-Questo è un controllo più che altro sintattico sul contenuto della tabella. In
questa formula non viene fatta alcuna verifica sul reale significato dei simboli
presenti.

3.4 La prima riga della tabella rappresenta la configu-


razione iniziale
La formula che lo verifica è:
φstart = x1,1,# ∧ x1,2,q0 ∧ x1,3,w1 ∧ x1,4,w2 ∧ . . . ∧ x1,n+2,wn ∧ x1,n+3, ∧ . . . ∧ x1,nk −1, ∧ x1,nk ,# φstart = x1,

3.5 Ogni transizione da una riga alla riga successiva è val-


ida
Questa è la condizione più difficile da verificare in assoluto. Per questo motivo
verrà fornito un abbozzo di dimostrazione.
È possibile verificare la correttezza delle righe analizzando solamente delle ”finestre”
di due righe e tre colonne. Di ognuna di queste finestre si potrà dire se è giusta
o sbagliata guardando alla funzione di transizione della macchina di Turing che
si sta simulando e a dei controlli formali.

-un simbolo che cambia da una riga ad un’altra senza che la testina sia pun-
tata sulla cella in cui il simbolo si trova;
-una riga contiene due stati della macchina di Turing;
-i simboli scritti e gli spostamenti a destra o sinistra non rientrano nella funzione
di transizione della macchina
^ di Turing. ^
Cioè: φmove = (laf inestra(i, j) è lecita)φmove = (laf inestra(i, j)èlecita)
1≤i<nk ,1<j<nk 1≤i<nk ,1<j<nk
La finestra (i, j) è la finestra di due righe e tre colonne che ha la cella in alto al
centro in posizione (i, j).

3.6 Almeno una riga della tabella rappresenta uno stato


di accettazione
Si tratta di verificare che almeno una cella della tabella contiene uno stato di
accettazione._ W
φaccept = xi,j,qaccept φaccept = 1≤i,j≤nk xi,j,qaccept
1≤i,j≤nk
Abbiamo detto che la tabella rappresenta un ramo di una computazione di una
macchina di Turing non deterministica, dobbiamo accertarci però che si tratti
di un ramo di computazione che termina con l’accettazione.

3.7 Conseguenze
Una volta dimostrato che ogni problema appartenente a NP può essere ridotto
in tempo polinomiale ad una istanza del problema di soddisfacibilità booleana,

4
si deduce che se questo problema potesse essere risolto in tempo polinomiale
da una macchina di Turing deterministica, tutti i problemi in NP potrebbero
essere risolti in tempo polinomiale, e quindi la classe di complessità NP sarebbe
uguale alla classe di complessità P.

Potrebbero piacerti anche