You are on page 1of 10

Acest document conine demonstraia teoremei lui Cook, cu unele adugiri n raport cu cartea "Introducere n Analiza Algoritmilor".

Util este, mai ales, exemplul de construcie a formulei FAlg,D pentru un algoritm nedeterminist simplu.

Cristian Giumale, Note de curs

3.2.4 Teorema lui Cook


Cunoaterea unei probleme NP-complete este deosebit de important, fiind baza construciei ntregii ierarhii NPC. O asemenea problem este cea a satisfiabilitii unei formule n calculul propoziional, iar NP-completitudinea ei este consecina teoremei lui Cook. Definiia 3.19 Numim formul propoziional n form normal conjunctiv (pe scurt CNF) o formul cu sintaxa convenional:
<variabil> ::= un simbol care poate fi asociat unei unice valori de adevr din mulimea {0,1} <literal> ::= <variabil> | <variabil> <termen> ::= <literal> | (<literal> [ <literal>]+) <formul> ::= <termen> [ <termen>]*

unde este negaia logic, iar i sunt conectorii logici sau, i. Considerm c un termen nu are apariii redundante ale literalilor (o variabil poat s apar doar de dou ori ntr-un termen, cu i fr negaie), iar formula nu conine termeni identici. O formul CNF F este satisfiabil dac exist o asociere (legare) a variabilelor din F la valori de adevr astfel nct valoarea lui F s fie 1. Fie problema: pentru o formul CNF F s se determine dac F este satisfiabil. Problema poart numele de problema SAT: problema satisfiabilitii unei formule propoziionale n form normal conjunctiv. De exemplu, formula F = (x1 x2 x3) (x1 x2 x3) este satisfcut pentru x1=1, indiferent de valorile celorlalte variabile. Teorema 3.7 (Cook) SAT P dac i numai dac P = NP.
P = NP SAT P. S considerm urmtorul algoritm nedeterminist de

rezolvare a problemei SAT:


N_SAT(F) { // F este formula CNF Var = variabile(F); // card(Var) = n for-each(xVar) x = choice({0,1}); // Verificare satisfacere F n raport cu valorile variabilelor for-each(term termeni(F)) { satisf_term = 0; for-each(xVar) if((literal x)term x=1 (literal x)term x=0) {satisf_term = 1; break;} if(satisf_term) fail; } success; }

Teorema lui Cook

Dac n este numrul variabilelor din formul, iar m=(nk) este numrul termenilor, limitat polinomial n raport cu n, atunci complexitatea algoritmului N_SAT este polinomial: (nk+c+1), unde (nc) este complexitatea cutrii unui literal ntrun termen (operaiile (literal x)term i (literal xterm)). Prin urmare SATNP. Dac P = NP i SAT NP rezult imediat SAT P.
SATP P = NP. Implicaia se demonstreaz artnd c pentru orice algoritm AlgNP - cu complexitatea polinomial p(n), unde n este dimensiunea datelor D ale lui Alg - exist o formul CNF echivalent, fie ea FAlg,D, astfel nct:

FAlg,D are un numr polinomial de variabile i termeni n raport cu p(n) i, de asemenea, se poate construi n timp polinomial n raport cu p(n). FAlg,D este satisfiabil dac i numai dac Alg se termin cu succes pentru datele de intrare D. Cu alte cuvinte, se arat c pentru orice problem Q NP avem Q p SAT. Deoarece SAT NP, rezult c SAT este NP-complet i, conform teoremei (3.5), dac SAT P, atunci P = NP. Construcia mai uoar a formulei FAlg,D impune restricionarea modului de specificare a algoritmului Alg, dar fr a afecta funcionalitatea acestuia. Restriciile se refer la structura de control i la variabilele algoritmului. Controlul execuiei algoritmului Instruciunile algoritmului sunt etichetate 1,2,...,l, n secven de la prima la ultima instruciune din specificaia textual a algoritmului. Prima instruciune executat este instruciunea cu eticheta 1.
if(variabil) goto i i, respectiv, goto i, pentru o etichet i[1,l]. Predicatele

Controlul execuiei se realizeaz folosind doar dou instruciuni de salt:

sunt simple variabile cu valori booleene. Valorile expresiilor mai complicate trebuie atribuite unor variabile pentru a fi testate. Variabilele algoritmului n algoritm nu apar constante. Constantele sunt reprezentate prin variabile considerate ca parametri suplimentari ai algoritmului. Iniial, valoarea oricrei variabile a algoritmului este 0. Excepie fac doar variabilele cu rol de parametru, iniializate cu datele D ale algoritmului sau cu valorile constante reprezentate de unele variabile (valori considerate parte a datelor D). Considerm c valoarea oricrei variabile este reprezentat prin w bii, numerotai 1...w de la dreapta spre stnga. Prin convenie, o valoare cu bitul de rang 1 egal cu 1 corespunde valorii adevrat, iar o valoare cu bitul de rang 1 egal cu 0 corespunde valorii fals.

Cristian Giumale, Note de curs

Variabilele din algoritmul Alg sunt scalare, vectorii fiind reprezentai prin mulimi de variabile scalare. De exemplu, vectorul v cu m elemente este reprezentat de variabilele v1, v2,...,vm, iar atribuirea x = vi este nlocuit prin codul de mai jos, unde variabila val_k, k=1,2,...,m, reprezint constanta k, iar variabila val_v reprezint valoarea variabilei vi.
e1: test = ival_1; if(test) goto e2; val_v = v1; goto em+1; ... ek: test = ival_k; if(test) goto ek+1; val_v = vk; goto em+1; ... em+1: x = val_v;

cod indexare vi

Deoarece se consider c fiecare operaie efectuat n cursul execuiei algoritmului Alg dureaz o unitate convenional de timp, numrul variabilelor folosite de algoritm nu poate depi c p(n), cu c constant. Notm cu Var mulimea variabilelor folosite de algoritm, card(Var)c p(n). Restriciile introduse nu reduc puterea computaional a algoritmilor. Este suficient s ne gndim la un algoritm (determinist) direct codificabil ntr-un limbaj de asamblare sau la codul nativ generat de un compilator. Construcia formulei FAlg,D privete o cale posibil din execuia algoritmului nedeterminist Alg ca pe o secven de stri. O stare este un triplet s = e,var,t, unde t este momentul de timp corespunztor strii s, e este eticheta instruciunii executat la momentul t, iar var este mulimea valorilor variabilelor Var ale algoritmului la momentul t. Timpul curge ncepnd de la 1 (momentul iniial, cel al execuiei instruciunii 1) cu increment unitar pn la momentul p(n), cnd execuia se termin. Formula CNF FAlg,D trebuie construit n aa fel nct: 1. S reflecte condiiile de corectitudine ale oricrei secvene de stri e1,var1,1,...,ek,vark,p(n) ce poate rezulta n urma execuiei algoritmului nedeterminist Alg. 2. S fie satisfiabil dac i numai dac exist o secven de stri care corespunde execuiei cu succes (execuie serial) a unei ci din arborele copiilor algoritmului. Formula nu va descrie fiecare flux particular de instruciuni executate de algoritm, ci doar condiiile ca un flux corect (oricare flux, adic o secven corect de stri) s existe. Interesant este, din acest punct de vedere, i modalitatea reprezentrii atribuirii v = choice({S1, S2,...,Sk}) i, implicit, descrierea funcionrii algoritmului fr a-i reprezenta explicit cele k copii. Efectul atribuirii este descris ca o disjuncie de termeni din formula FAlg,D, termeni ce desemneaz toate

Teorema lui Cook

valorile posibile ale variabilei v la un moment dat de timp. n acest mod, putem descrie un flux generic de instruciuni ale lui Alg fr a preciza crei copii a algoritmului i aparine fluxul. Cu alte cuvinte, putem descrie simultan toate fluxurile corecte de instruciuni pe care le poate genera algoritmul n cursul execuiei sale. Construcia formulei FAlg,D utilizeaz urmtoarele clase de variabile1 cu valori de adevr {0,1}. 1. Variabile de forma B(x,i,t), xVar, i1..w, t1..p(n). B(x,i,t) corespunde bitului de rang i al valorii variabilei x la momentul t. B(x,i,t)=1 arat c bitul i este 1 la momentul t, iar B(x,i,t)=0 arat c bitul i este 0 la momentul t. Astfel, formula B(x,i,t) este satisfiabil dac i numai dac variabila x a
i=1 w ,

algoritmului are valoarea 0 la momentul t. 2. Variabile de forma S(k,t). S(k,t)=1 indic execuia instruciunii k la momentul t, iar S(k,t)=0 arat c la momentul t nu se execut instruciunea k. Formula FAlg,D conine ase tipuri de sub-formule CNF care descriu corectitudinea strilor pe care le poate genera orice flux al execuiei instruciunilor algoritmului la diverse momente de timp 1 t p(n):
FAlg,D = Init Start Serial Flow Eval Stop Init descrie starea iniial a variabilelor algoritmului. La momentul t = 1 variabilele din Var au valoarea 0, cu excepia celor cu rol de parametru, care sunt iniializate conform datelor D. Init =

x Var i=1 w ,

Tx,i

Tx,i = B(x,i,1), dac x este parametru al Alg i bitul i din valoarea variabilei x este 1 conform datelor D Tx,i= B(x,i,1), dac x nu este parametru al Alg sau dac x este parametru i bitul i din valoarea sa este 0 conform D

Se observ imediat c Init este CNF i este satisfiabil dac i numai dac iniializarea variabilelor algoritmului este corect.
Start arat c prima instruciune executat de algoritm este cea etichetat 1. Start = S(1,1)
i = 2,l

S(i,1)

1 Din acest moment trebuie s distingem ntre variabilele algoritmului Alg i cele ale formulei FAlg,D. Totodat, trebuie s observm c fiecare literal din FAlg,D are o interpretare fixat n raport cu care probm satisfiabilitatea formulei.

Cristian Giumale, Note de curs

Formula Start este CNF i este satisfiabil dac i numai dac execuia algoritmului ncepe la t = 1 cu instruciunea a crei etichet este 1.
Serial descrie execuia serial a oricrui flux de instruciuni din algoritmul Alg. La un moment de timp t este executat o singur instruciune a unui flux. Serial =
t = 1 p n) , (

( (

i=1 l ,

S(i,t))

i,j= 1 l , ij

(S(i,t) S(j,t)) )

Formula arat c la orice moment t n cursul execuiei unui flux de instruciuni al algoritmului exist o instruciune executat i aceasta este unic. Dac la momentul t exist dou instruciuni ij executate ntr-un flux atunci termenul S(i,t) S(j,t) este fals, iar formula Serial nu este satisfcut. Formula este n form CNF i este satisfiabil doar n cazul execuiei seriale a oricrui flux de instruciuni al algoritmului.2
Flow completeaz proprietatea de serialitate a execuiei fluxurilor de instruciuni ale algoritmului. Pentru fiecare instruciune i a algoritmului Alg i pentru fiecare moment de timp t din cursul execuiei, Flow conine un termen care arat c:

fie instruciunea i nu este executat la momentul t, fie i este executat la momentul t, iar instruciunea executat la momentul t+1 este univoc determinat conform instruciunii i.
t = 1 p n) 1 ,( i=1 l ,

Flow =

(S(i,t) Nexti,t)

Nexti,t = S(i,t+1), dac instruciunea S(i,t) este success sau fail. Prin urmare, dup execuia unei astfel de instruciuni terminale se pretinde c algoritmul bucleaz pe instruciunea respectiv. Nexti,t = S(j,t+1), dac instruciunea S(i,t) este goto j; Nexti,t = (B(x,1,t) S(j,t+1)) (B(x,1,t) S(i+1,t+1)), dac instruciunea S(i,t) este if(x) goto j. Atunci, dac valoarea variabilei x din Alg este adevrat la momentul t, urmtoarea instruciune executat este j. Altfel algoritmul continu cu instruciunea i+1. Dei termenul (S(i,t) Nexti,t), cu Nexti,t n forma de mai sus, nu este CNF, el poate fi convertit n form CNF conform: a (b c) (d e) = (a b d) (a c d) (a b e) (a c e). Nexti,t = S(i+1,t+1), dac S(i,t) nu este o instruciune de control success, fail, goto, if...goto.

Conform particularizrilor termenului Nexti,t rezult c Flow este CNF i este satisfiabil dac i numai dac algoritmul are o execuie corect n ceea ce privete determinarea urmtoarei instruciuni de executat.
2 n prezena formulei SERIAL, formula START poate fi simplificat START= S(1,1). Iniial, s-a preferat forma redundant pentru o simplifica explicaia.

Teorema lui Cook

Eval corespunde execuiei efective a instruciunii de la momentul t i modificrii valorilor variabilelor Var ale algoritmului. Pentru fiecare instruciune i a algoritmului Alg i pentru fiecare moment de timp t din cursul execuiei, Eval conine un termen care arat c:

fie instruciunea i nu este executat la momentul t, fie i este executat la momentul t, iar valoarea variabilelor Var la momentul t+1 este cea corespunztoare instruciunii i i valorilor Var la momentul t.
t = 1,p(n) 1 i = 1,l

Eval =

(S(i,t) Evali,t)

Dac instruciunea S(i,t) nu este o atribuire, atunci


Evali,t=
x Var j= 1,w

((B(x,j,t) B(x,j,t+1)) (B(x,j,t) B(x,j,t+1)))

n acest caz, formula Evali,t este satisfiabil dac i numai dac variabilele algoritmului i pstreaz nealterate valorile atunci cnd nu sunt modificate explicit. Termenul S(i,t) Evali,t nu este n form CNF, dar poate fi transformat conform echivalenei a (b c) (b c) = (a b c) (a b c). Dac S(i,t) este o atribuire de forma x = choice({V1,V2,...,Vk}), unde Vi, i=1,k, sunt variabile (scalare) din Alg, atunci la momentul t+1: variabilele din Var diferite de x i pstreaz valorile de la momentul t; variabila x poate avea orice valoare desemnat de variabilele Vj, j=1,k.

n acest caz, formula Evali,t nu reflect n mod explicit construcia copiilor algoritmului. Esenial este descrierea posibilitii de a lega variabilele algoritmului la toate valorile corecte, inclusiv cele specificate n instruciunile choice. Este ca i cum ntregul arbore al execuiei algoritmului Alg, arbore ale crui noduri corespund instruciunilor choice, ar fi aplatizat, fiecare instruciune din Alg fiind eligibil pentru execuie n egal msur. Perspectiva oarecum stranie este posibil, deoarece formula construit nu descrie execuia unei anumite copii a algoritmului, ci doar restriciile ce trebuie ndeplinite pentru execuia corect a oricrei copii, deci practic a tuturor copiilor.
Evali,t= ((B(y,j,t) B(y,j,t+1)) (B(y,j,t) B(y,j,t+1)))
y Var yx j= 1,w

r = 1,k j= 1,w

((B(Vr,j,t) B(x,j,t+1)) (B(Vr,j,t) B(x,j,t+1)))

Formula S(i,t) Evali,t nu este CNF, dar poate fi adus la forma CNF.

Cristian Giumale, Note de curs

Dac S(i,t) este o atribuire x = expresie, unde expresie nu este choice, atunci Evali,t este o formul care expliciteaz restriciile ce trebuie ndeplinite de valorile variabilelor din expresie i de B(x,j,t+1), j=1,w, astfel nct operaiile din expresie s fie corecte. Funcionalitatea expresiei este descris prin precondiii i postcondiii. Ca exemplu simplu, considerm c instruciunea S(i,t) este atribuirea x = y z n urma creia x ia valoarea adevrat la momentul t+1 dac i numai dac valorile variabilelor y i z sunt adevrat la momentul t, adic (ytztxt+1) (xt+1ytzt). Doar bitul 1 al valorii lui x trebuie s fie determinat la momentul t+1; ceilali bii ai lui x pot avea orice valori. n acest caz forma CNF a lui Evali,t este:
Evali,t= (B(y,1,t) B(z,1,t) B(x,1,t+1)) (B(y,1,t) B(x,1,t+1)) (B(z,1,t) B(x,1,t+1)) ((B(y,j,t) B(y,j,t+1)) (B(y,j,t) B(y,j,t+1)))
y Var yx j= 1,w

Pentru operaii aritmetice dificultatea sintezei lui Evali,t crete substanial. Ocolim aici construciile care arat exist formule Evali,t pentru operaiile aritmetice uzuale i pentru compunerea lor. Toate aceste formule pot fi aduse la forma CNF i i pstreaz lungimea polinomial n raport cu n (mrimea datelor D). Construcia unui termen Eval arat c formula rezultat este CNF i este satisfiabil dac i numai dac modificarea valorilor variabilelor lui Alg este corect n raport cu instruciunea executat n fluxul generic de instruciuni al algoritmului.
Stop corespunde terminrii cu succes a algoritmului, deci execuiei uneia din instruciunile success din Alg. S presupunem c etichetele instruciunilor success sunt: e1, e2,...,er. Stop =
i=1 r ,

S(ei,p(n))

Formula Stop este satisfiabil dac i numai dac la momentul p(n) se execut o instruciune success. De remarcat c instruciunea success poate fi executat prima dat la un moment de timp t < p(n). Conform construciei formulei Flow, algoritmul continu s execute instruciunea pn la momentul p(n). Conform construciei celor ase tipuri de formule, rezult c FAlg,D este CNF i este satisfiabil dac i numai dac Alg(D) are un flux corect de instruciuni care conduce la terminarea cu succes a algoritmului. De asemenea, formulele pot fi construite n timp polinomial, funcie de p(n), pornind de la Alg. Rezult c problema QAlgNP rezolvat de algoritmul Alg satisface QAlg p SAT. !

Teorema lui Cook

9
p SAT

Un exemplu de reducere Alg(D)

Ca exemplu de construcie a formulei FAlg,D s considerm algoritmul de mai jos, unde variabilele x i y sunt booleene i au un singur bit. Algoritmul decide dac mcar una din variabilele x i y este 1 (realizeaz calculul x y). Datele algoritmului sunt D=(1,0), n=2, timpul de execuie al algoritmului este p(n)=3, iar numrul de instruciuni este l=4.
Alg(x,y) { 1: x = choice{x,y}; 2: if(x) goto 4; 3: fail; 4: success; }

Pentru datele D, x=1 i y=0, formulele din FAlg,D sunt construite ca n demonstraia teoremei lui Cook i, pentru claritate, nu sunt toate n form CNF.
INIT = B(x,1,1) B(y,1,1) START = S(1,1) STOP = S(4,3) SERIAL=
t =1 3 ,

(S(1,t) S(2,t) S(3,t) S(4,t)) (S(1,t) S(2,t)) (S(1,t) S(3,t)) (S(2,t) S(3,t))

FLOW =

t =1 2 ,

(S(1,t) S(2,t+1)) (S(2,t) B(x,1,t) S(4,t+1) B(x,1,t) S(3,t+1)) (S(3,t) S(3,t+1)) (S(4,t) S(4,t+1))

EVAL =

t =1 2 ,

[S(1,t) (B(x,1,t) B(y,1,t) (B(y,1,t) [S(2,t) (B(x,1,t) (B(y,1,t) [S(3,t) (B(x,1,t) (B(y,1,t) B(x,1,t+1) B(x,1,t) B(x,1,t+1) B(x,1,t+1) B(y,1,t) B(x,1,t+1)) B(y,1,t+1) B(y,1,t) B(y,1,t+1)] B(x,1,t+1) B(x,1,t) B(x,1,t+1)) B(y,1,t+1) B(y,1,t) B(y,1,t+1))] B(x,1,t+1) B(x,1,t) B(x,1,t+1)) B(y,1,t+1) B(y,1,t) B(y,1,t+1))]

Flow Eval Stop folosim notaia:

Pentru a studia satisfiabilitatea formulei FAlg,D = Init Start Serial


formula (t=k) legri variabile din FAlg,D

10

Cristian Giumale, Note de curs

Notaia indic ce legri ale diverselor variabile de forma B(x,i,t), B(y,i,t) i S(i,t) sunt necesare pentru a satisface sub-formula din FAlg,D pentru momentul de timp t=k al execuiei algoritmului Alg cu datele D. Legrile indicate in seama de toate legrile deja deduse ale variabilelor din FAlg,D.
INIT B(x,1,1)=1, B(y,1,1)=0 START S(1,1)=1 SERIAL (t=1) S(2,1)=S(3,1)=S(4,1)=0 EVAL (t=1) B(x,1,2)=0 sau B(x,1,2)=1, B(y,1,2)=0 FLOW (t=1) S(2,2)=1 SERIAL (t=2) S(1,2)=S(3,2)=S(4,2)=0

Varianta 1. B(x,1,2)=0
FLOW (t=2) S(3,3)=1 EVAL (t=2) B(x,1,3)=0, B(y,1,3)=0 SERIAL (t=3) S(1,3)=S(2,3)=S(4,3)=0 STOP 0 FAlg,D=0 pentru fluxul de instruciuni 1,2,3 executat pentru copia algoritmului n care x=0 dup execuia instruciunii choice. Legarea variabilelor este: B(x,1,1) B(x,1,2) S(1,1) = S(4,1) = S(1,2) = = 1 = B(x,1,3) = B(y,1,1) = B(y,1,2) = B(y,1,3) = 0 S(2,2) = S(3,3) = 1 S(4,2) = S(4,3) = 0 S(1,3) = S(2,1) = S(2,3) = S(3,1) = S(3,2) = 0

Varianta 2. B(x,1,2)=1
EVAL (t=2) B(x,1,3)=1, B(y,1,3)=0 FLOW (t=2) S(4,3)=1 SERIAL (t=3) S(1,3)=S(2,3)=S(3,3)=0 STOP 1 FAlg,D=1 pentru fluxul de instruciuni 1,2,4 executat pentru copia algoritmului n care x=1 dup execuia instruciunii choice. Legarea variabilelor este: B(x,1,1) B(y,1,1) S(1,1) = S(3,1) = S(1,2) = = B(x,1,2) = B(x,1,3) = 1 = B(y,1,2) = B(y,1,3) = 0 S(2,2) = S(4,3) = 1 S(3,2) = S(3,3) = 0 S(1,3) = S(2,1) = S(2,3) = S(4,1) = S(4,2) = 0

Se verific propoziia: FAlg,D este satisfiabil dac i numai dac exist o cale terminat cu succes n arborele execuiei algoritmului Alg pentru datele D.