Dispensa di Informatica Teorica (Elementi) - Teorema di Cook

Documenti analoghi
Automi e Linguaggi Formali

Algoritmo per A. !(x) Istanza di B

Problemi intrattabili, classi P e NP. Problemi intrattabili, classi P e NP

Problemi intrattabili

Partizioni intere. =! i# P. Es: Dato {38, 17, 52, 61, 21, 88, 25} possiamo rispondere positivamente al quesito poiché

Progetto e analisi di algoritmi

Certificati dei problemi in NP

Aniello Murano NP- Completezza (prima parte)

3-SAT CLIQUE VERTEX-COVER INDEPENDENT-SET 3-COLORING

Problemi decisionali. Esempi

Teorema 1. Il problema AP è N P-complete.

Ragionamento Automatico Richiami di tableaux proposizionali

Capitolo 8: Teoria della complessitá

In prima approssimazione definiamo trattabili i problemi che possono essere risolti in tempo polinomiale con MT. Motivazioni:

Complessità. Ricorda: Problema P decidibile Linguaggio L P decidibile Taglia input x x. Esempio: G è un grafo connesso? { G G è un grafo connesso}

In prima approssimazione definiamo trattabili i problemi che possono essere risolti in tempo polinomiale con MT. Motivazioni:

Ancora su 2-SAT. può essere pensata come una coppia di implicazioni!! " 1

Ma il programma in Fig. 8.2 del libro? Stampa hello, world, dato un input n se e solo se l equazione

Informatica teorica Lez. n 7 Macchine di Turing. Macchine di Turing. Prof. Giorgio Ausiello Università di Roma La Sapienza

La MT come riconoscitore

Automi a stati finiti

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Riduzioni che preservano l approssimazione e completezza nelle classi di approssimabilità.

Capitolo 9: Trattabilitá e intrattabilitá dei problemi

Sommario. Caratterizzazione alternativa di NP: il verificatore polinomiale esempi di problemi in NP

Soddisfacibilità e Semantic Tableau [1]

NP completezza. Problemi astratti

NP completezza. Vittorio Maniezzo - Università di Bologna

Linguaggio universale, riduzioni, e teorema di Rice. Linguaggio universale, riduzioni, e teorema di Rice

Logica Algoritmi Cognizione

ESAME di LOGICA PER INFORMATICA 24 giugno 2003

Complessità Strutturale e NP-Completezza

Capitolo 5: Macchine di Turing e calcolabilitá secondo Turing

Teoria della NP-completezza

Aniello Murano Space Complexity

Soddisfacibilità e Semantic Tableau [1]

Dentro P e oltre NP?

Esercitazioni per il corso di Logica Matematica

Logica proposizionale

Note sulle classi di complessità P, NP e NPC per ASD (DRAFT)

Capitolo 1 Concetti matematici di base Insiemi, relazioni e funzioni... 1

Nome: Corso di laurea: Matricola:

Sommario. Problemi di decisione, di ricerca e di ottimizzazione: come sono legate le complessità delle diverse versioni dei problemi?

Sommario. Macchina di Turing universale Proprietà dei problemi Turing riconoscibili Linguaggi non Turing riconoscibili.

Limiti della calcolabilità

Alberi di sequenti per un linguaggio predicativo L 1.

Automi Automi finiti: macchine a stati su sistemi di transizioni finiti Modellare con TS e specificare con automi: si usa lo stesso tipo di

Linguaggi Regolari e Linguaggi Liberi

Linguaggi Regolari e Linguaggi Liberi. Linguaggi Regolari. Determinismo vs Non determinismo. Potere espressivo

Alberi: definizioni e dimostrazioni induttive.

Complessità computazionale

PSPACE completezza. Un linguaggio A è PSPACE completo se. 1. A è in PSPACE, cioè esiste una TM T che accetta A con complessità di spazio polinomiale.

Teoria della complessità

Complessità computazionale. Intermezzo tecnico

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Teoria della NP-completezza. Damiano Macedonio

Le classi P, NP, PSPACE

e Algoritmi Marco Piastra Intelligenza Artificiale I Soddisfacibilità

TEORIA DELLA COMPLESSITÀ

Fondamenti dell Informatica. Esercizi di preparazione al secondo compitino

Concetti di base sugli automi e sui linguaggi formali

Agenti Basati su Logica

Logica per la Programmazione

Logica per la Programmazione

02 - Logica delle dimostrazioni

Algoritmi e Principi dell'informatica Seconda Prova in Itinere - 14 Febbraio 2014

Teoria della Complessità Computazionale

Trattabilità computazionale.

Macchine di TURING. Alan Mathison Turing ( )

Aniello Murano Classe dei problemi NP. Nella lezione precedente abbiamo visto alcuni problemi che ammettono soluzione polinomiale

Logica per la Programmazione

Sommario. Problemi di decisione, di ricerca e di ottimizzazione: come sono legate le complessità delle diverse versioni dei problemi?

Esercitazione 3 - Linguaggi e Calcolabilità Antonio Cruciani

a cura di Luca Cabibbo e Walter Didimo

Logica per la Programmazione

Macchine di Turing: somma di due numeri

Logica proposizionale classica. Studia il comportamento dei connettivi proposizionali quali ( And ) e ( Or )

9 Calcolo dei sequenti LC p

Logica per la Programmazione

Informatica Teorica. Sezione Cremona + Como. Appello del 20 Luglio 2004

Teoria della Complessità Concetti fondamentali

Esercitazione 2 - Linguaggi e Calcolabilità Antonio Cruciani

Teoria della Complessità Computazionale Parte II: Classi di Complessità

SOLUZIONI DI ESERCIZI SCELTI ELEMENTI DI MATEMATICA E INFORMATICA TEORICA VERSIONE DEL 14 MAGGIO Esercizio 18

04 - Logica delle dimostrazioni

Linguaggi Regolari e Linguaggi Liberi

Sommario. Caratterizzazione alternativa di NP: il verificatore polinomiale la classe conp e le relazioni tra P, NP,coNP e EXPTIME

Teoria della Complessità Computazionale

Testi di esame precedenti a.a. e soluzioni

Cosa si intende con stato

Logica proposizionale classica. Studia il comportamento dei connettivi proposizionali quali ( And ) e ( Or )

Sviluppo di programmi

Transcript:

Teorema di ook (Idea generale) Dato L NP, costruire una trasformazione polinomiale f da L a L (sodd, e), cioè il linguaggio composto dalle stringhe che corrispondono ad istanze del problema sodd. La trasformazione f opera in questo modo: dato L e la specifica della NDTM N che decide L, e data la stringa di ingresso x f( = φ ( N, dove φ ( N, è vera su un assegnamento di verità sse una computazione accettante di N su x. φ ( N, è costruita in modo tale che l assegnamento di verità descriva un ramo di computazione di N su input x. Tre tipi di variabili utilizzate: o H(i, t) posizione della testina posizione i al tempo t o S(k, t) stato della macchina stato k al tempo t o (i, j, t) simboli sul nastro alla posizione i c è il simbolo σ j al tempo t. Per descrivere la macchina usando le precedenti variabili servono alcune condizioni, per assicurare che l espressione booleana specifichi una computazione della NDTM. Tali condizioni sono 7 e se sono TUTTE verificate φ è sodd x L. Per ogni condizione usiamo una diversa formula, costruita a partire dalle precedenti variabili. Es. Data la NDTM N, ad ogni istante di tempo la testina di N è posizionata su una sola cella del nastro. Per codificare questa condizione costruiamo un espressione A = A 0 A 1 A 2 A p(n) p(n) = tempo di computazione di N. Ogni A i assicura che al tempo i la testina è posizionata su una sola cella. NB La trasformazione è polinomiale deterministica: DTM che costruisce φ in tempo polinomiale. 1

Teorema di ook: SODD è NP_completo. Sodd Istanza: espressione booleana φ in FN nelle variabili (x 1, x 2, x n ). Domanda: φ è soddisfacibile? ( assegnamento di verità che soddisfi φ?) Dimostrazione: Bisogna dimostrare che: 1) SODD NP. 2) trasformazione polinomiale f da ogni linguaggio L NP a L(sodd, e) L NP si ha che L < L sat. 1) Una NDTM che risolve SODD ha le seguenti due componenti: - Guess fornisce un assegnamento di verità - heck verifica l assegnamento in tempo polinomiale. 2) Preso L NP, x *, x L sse f( L(sodd, e). Poiché L NP NDTM che decide L, NL f L ( è una codifica che ad ogni x fa corrispondere un espressione booleana. Bisogna mostrare che: x è accettata da N L f L ( è un espressione booleana soddisfacibile. L NP NDTM per L f L( sodd, e) f ( = φ( N, è sodd Identifichiamo L in NP con la NDTM che lo decide x L sse una computazione accettante di NL su x. Il passaggio a SODD lo facciamo attraverso la NDTM: una computazione accettante di N L su x sse φ ( N, è soddisfacibile. Problema: ostruire un espressione booleana a partire dalla NDTM, con le seguenti 2 richieste: 1) Data N L che decide L, costruire un espressione booleana in FN che dipende da N e da x in modo che: φ ( N, è soddisfacibile sse N accetta x. 2) La costruzione di φ ( N, deve essere fatta in tempo polinomiale da una DTM. 2

La trasformazione f ha in input: - N L = (K,,, q0) NDTM per L - x stringa in ingresso N L. (N L, Istanza di SODD f Poniamo: - = n simboli - K = l stati - p(n) = complessità temporale di N L ( L NP tempo polinomiale per NDTM). N accetta x in tempo p(n) sse accettante e si ha che q p(n). sequenza di configurazioni c0 c 1 c 2 c q tale che c q è Assumiamo che NL impieghi sempre p(n) passi per accettare. (Se richiede meno passi basta eseguire finte computazioni). Assumiamo che la stringa sul nastro abbia esattamente lunghezza p(n). Albero di computazione Tutti i rami hanno la stessa lunghezza: dalla radice alle foglie ci sono p(n) nodi. Stringa di computazione > s s 2 K s K 14444 i _ _ _ 244443 1 Lunghezza p ( n) _ = blank (vengono aggiunti affinchè la stringa raggiunga la lunghezza p(n)). 3

Problema: come distinguiamo con una formula φ ( N, il fatto che / o una computazione accettante di NL su x? φ ( N, è soddisfacibile sse assegnamento di verità che rende vera φ ( N, se sequenza di configurazioni c 0 c 1 c 2 c p(n) accettante dovrà corrispondere ad un assegnamento di verità alle variabili di φ, in modo che φ sia soddisfatta. Ogni assegnamento di verità alle variabili di φ dovrà rappresentare in modo univoco una computazione della macchina N. Dobbiamo costruire le variabili di φ in modo che descrivano delle configurazioni della NDTM. Per poter ottenere questo, dovremo costruire espressioni particolari utilizzando le operazioni logiche,,. Abbiamo bisogno di tre tipi di variabili (poiché ogni configurazione di TM è descritta da (q, σ, p) rispettivamente stato della macchina, stringa sul nastro e posizione della testina): S(k, t) con 1 k p(n) e 0 t p(n) S(k, t) = TRUE sse al tempo t lo stato della macchina è q k. (i, j, t) con 1 i p(n), 1 j e 0 t p(n) (i, j, t) = TRUE sse al tempo t la i-esima cella del nastro contiene il simbolo σ. j H(i, t) con 1 i p(n) e 0 t p(n) H(i, t) = TRUE sse al tempo t la testina è posizionata sull i-esima cella del nastro. Es. (tempo = 5) > σ σ _ _ 2 σ 4 3 q 4 S(4, 5) (1, 2, 5) (2, 4, 5) (3, 3, 5) H(2, 5) 4

Utilizzando i precedenti tre tipi di variabili posso dare una descrizione della macchina, configurazione per configurazione. Problema: costruzione dell espressione Es. (1, 1, 1) (1, 3, 1) H(2, 1) S(3, 1) Se diamo un assegnamento di verità in cui tutte queste variabili sono vere, ottengo che l espressione precedente è vera. Ma questa espressione non descrive una configurazione di una macchina (le due variabili indicano che ci sono due simboli diversi nello stesso momento, nella stessa cella). Data l espressione booleana U(x 1 x 2 x n ) che assume valore TRUE sse ESATTAMENTE UNA variabile x i assume valore true: U(x 1 x 2 x n ) = (x 1 x 2 x n ) ( ( x i, j, i j i x j ) ) vera se almeno una tra le x i è vera se ci sono due variabili entrambe vere, questa espressione risulta falsa osto per la costruzione dell espressione precedente: O(n 2 ) polinomiale per DTM. onsideriamo una stringa x. Tale stringa è accettata se: data una sequenza di configurazioni di una NDTM su ingresso x, per ciascuna configurazione c i sono verificate le seguenti condizioni: 1. La testina è posizionata su una sola cella. 2. Ogni posizione del nastro contiene un solo simbolo. 3. La macchina N si trova in un solo stato. 4. Nella configurazione c i+1, la stringa memorizzata sul nastro differisce da quella in c i in al più un simbolo, quello sotto la testina in c i. 5. La transizione tra due configurazioni è determinata dalle regole in N. 6. c 0 deve essere la configurazione iniziale, (S, >, (oppure (S, x, 0)). 7. p(n) deve essere una configurazione accettante. NB (1 4) la NDTM è costruita correttamente, (5 7) la computazione è corretta e accettante. 5

Dobbiamo costruire espressioni booleane garantiscano che le precedenti proprietà siano soddisfatte. ostruiamo allora le espressioni come segue: 1. A = A 0 A 1 A p(n) dove istante t, A t = U (H(1, t), H(2, t),, H(p(n), t)) 0 t p(n) (Posizioni della testina: ad ogni istante, la testina si trova su una sola cella.) OSTO: A i (p(n)) 3 A O(p (n)) 2 Dato che U( ) O(n 2 ) 2. B = Bi, t con 1 i p(n), 0 t p(n) t i, B i, t = true sse al tempo t, l i-esima cella del nastro contiene esattamente un simbolo di. B i, t = U ((i, 1, t), (i, 2, t),, (i,, t)) OSTO: B = O(p 2 (n)) ( B i, t dipende da ) 3. = 0 t p( n) t t = true sse la macchina all istante t è in un preciso stato. t = U (S(1, t), S(2, t),, S( K, t)) OSTO: = O(p 2 (n)) 4. D = Di, j, t con 1 i p(n), 1 j e 0 t p(n) i t, j, D i, j, t = true sse al tempo t, la testina è posizionata sull i-esima cella o il simbolo in i non viene modificato. (ontrolla che non venga modificato un simbolo diverso da quello sotto la testina all istante t). D i, j, t = ((i, j, t) = (i, j, t+1)) H(i, t) I simboli sul nastro non devono cambiare, solo quello sotto la testina può farlo. Se sono alla posizione i, i simboli possono cambiare (H(i, t) è vero, per cui D(i, j, t) è vero anche se (i, j, t) (i, j, t+1)). OSTO: D = O(p 2 (n)) 6

5. E = E i, j, k, t i, j, k, t con 1 i p(n), 1 j, 1 k K e 0 t p(n) E è vera sse nella computazione c 0 c 1 c 2 c p(n) ogni transizione tra due configurazioni successive è determinata da. E i, j, k, t = [(i, j, t) H(i, t) S(k, t)] [ ((i, jl, t+1) H(il, t+1) l I S(kl, t+1))] I = insieme degli indici l ricavati da (( σ, qk ), ( σ jl, qkl, z il )) cioè (jl, kl, il) I. j OSTO: E i, j, k, t 2 O(p (n)) 6. F = S(0, 0) H(1, 0) ( (i, ji, 0)) ( 1 i n (i, 1, 0)) n+ 1 i p( n) Inizialmente la macchina è nello stato zero. La testina è sulla prima cella. Nelle prime n celle è memorizzato l input. Nelle celle da n+1 a p(n) c è il simbolo 1 = _. F garantisce che vi sia una sola configurazione iniziale, c 0. OSTO: F = O(p(n)) 7. G = S( K, p(n)), dove K = stato di arresto. Garantisce che p(n) sia uno stato accettante. Se prendiamo φ ( N, = A B D E F G abbiamo: OSTO: ( φ ( N, ) = O(p 3 (n)) polinomiale determ. N, x φ tale che se x L c è una computazione accettante per la NDTM φ ( N, è soddisfacibile. Se φ ( N, ha un assegnamento di verità che la soddisfa questo assegnamento corrisponde ad una computazione accettante di N su x. Ne consegue: φ ( N, è soddisfacibile N accetta x. φ è costruita in tempo polinomiale da una DTM L NP, L < L(sodd, e) sodd è NP_completo. 7

ome ampliare la classe NP_completi una volta trovato un problema NP_completo Dato NP _ completi è sufficiente dimostrare che: o 1 NP, 1 o <, 1 per poter dire che NP _. NB < 1 NON viceversa! 3_sodd: versione ristretta di SAT; ogni istanza di 3_sodd è tale che ogni clausola ha ESATTAMENTE 3 letterali. Teorema: 3_sodd è NP_completo. Dimostrazione: 3_sodd NP: E sufficiente considerare una NDTM in cui il guessing stage fornisce un assegnamento di verità per le variabili e il checking stage verifica in tempo polinomiale se l assegnamento soddisfa tutte le clausole composte da 3 letterali. Poiché sappiamo che SODD NP_completi, dobbiamo dimostrare che sodd < 3_sodd. onsideriamo: U = {u 1, u 2,, u n } insieme di variabili = {c 1, c 2,, c n } insieme di clausole, facenti parte di un istanza di sodd. Dobbiamo costruire un insieme di clausole su un insieme di variabili U in modo che: - ogni clausola abbia 3 letterali. - soddisfacibile sse soddisfacibile. Variabili: avremo bisogno di tutte le variabili in U più alcune aggiuntive: U U m = U U ( j ) NB un insieme aggiuntivo clausola. j = 1 lausole: sarà ottenuto da sostituendo le clausole c j in con clausole costituite da 3 letterali: = U m j j = 1 8

Dobbiamo mostrare come costruire j e U j partendo da j. onsideriamo c j costituito da letterali {x 1, x 2,, x k }. Definiamo j e U j a seconda del valore k (cioè in base al n. di variabili che costituiscono la clausola): k = 1 c j = {x 1 } U j = { y, y j, 2 } j = {( x 1, y, y j, 2 ), (x 1, y, y j, 2 ), (x 1, y, y j, 2 ), (x 1, y, y j, 2 )} = k = 2 = (x 1 y y j, 2 ) (x1 y y j, 2 ) (x 1 y y j, 2 ). c j = {x 1, x 2 } U j = { y } j = {(x1, x 2, y ), (x 1, x 2, y )} k = 3 c j = {x 1, x 2, x 3 } U j = { } j = {c j } c k 4 c j = {x 1, x 2,, x k } U j = { yj, i 1 i k - 3} j = {( x 1, x 2, y )} {( Es. k = 4 {( x 1, x 2, y )} {( y, x 3, x 4 )} y j, i, x i+2, y j, i+1 ) : 1 i k 4} {( j, k 3 j, 2 K = 5 {( x 1, x 2, y )} {( y, x 3, y j, 2 )} {( y, x 4, x 5 )} y, x k-1, x k )} 9

Le clausole j sono costruite in modo da essere soddisfacibili sse le cj sono soddisfacibili (da cui è soddisfacibile sse è soddisfacibile). Dobbiamo far vedere come costruire l assegnamento di verità t, estensione di t alle variabili in U. ominciamo a far vedere che: è soddisfacibile è soddisfacibile. k = 1 e k = 2: va bene un assegnamento qualunque (per come sono costruite le clausole): possiamo prendere t (y) = TRUE, y U j. Il fatto che vera o falsa) j sia vera o falsa dipende solo da t (e quindi dal fatto che cj sia se t che soddisfa cj t che soddisfa j. k = 3: non ci sono variabili aggiuntive, quindi t = t. k > 3: prendiamo t che soddisfa c j. assegnamento t che rende vera j? Poiché t soddisfa c j, almeno un letterale deve essere vero. Prendiamo quello di indice minore e indichiamo con l tale indice. - se l = 1 o l = 2 t (y j, i ) = F i, 1 i k - 3 (tutte le variabili aggiunte vengono poste a Falso) - se l = k o l = k 1 t (yj, i) = T i, 1 i k 3 (tutte le variabili aggiunte vengono poste a Vero) - se 3 l k 2 t (yj, i) = T i, 1 i l 2 t (y j, h ) = F h, l - 1 h k 3 (precedenti vere, seguenti false). La scelta di t assicura che tutte le variabili aggiuntive siano poste ad un valore per cui j risulta VERO. Per cui: se t soddisfa ogni cj è soddisfatta ogni j può essere soddisfatta con t è soddisfacibile. Al contrario: se t soddisfa ogni j è soddisfatto la restrizione di t alle sole variabili in U soddisfa ogni c j è soddisfatta. 10

Ne consegue che: è soddisfacibile sse è soddisfacibile. Per dimostrare che: 3_sodd è NP_completo, rimane solo da verificare che la trasformazione può essere eseguita in tempo polinomiale. Questo si può ricavare notando che il numero di clausole in è limitato da p(m * n) e ogni clausola è costruibile in tempo polinomiale. 3_sodd è NP_completo. 11