Capitolo 7: Teoria generale della calcolabilitá 1
Differenti nozioni di calcolabilitá (che seguono da differenti modelli di calcolo) portano a definire la stessa classe di funzioni. Le tecniche di simulazione fra modelli introducono i concetti di configurazione, calcolo e codifica. Possiamo formulare una teoria astratta della calcolabilitá, indipendente dal modello di calcolo adottato?? Tesi di Church-Turing: ogni funzione calcolabile rispetto ad una qualunque nozione di algoritmo (Turing, Kleene, λ-calcolo, Markov, Post) é calcolabile secondo Turing. 2
Quindi si congettura che la classe delle funzioni ricorsive sia la classe di funzioni piú generale per la quale si possa dare un metodo di calcolo algoritmico. Se si accetta tale tesi, si possono utilizzare descrizioni informali di algoritmi per dimostrare la calcolabilitá di funzioni senza esibire una macchina che le calcola. 3
Una enumerazione delle macchine a registri elementari Abbiamo visto che ogni funzione calcolata tramite una macchina a registri elementare é ricorsiva (associando numeri naturali agli stati della macchina e alle sequenze di stati). Mostriamo che anche i programmi per macchine a registri elementari possono essere codificati (cioé esiste una aritmetizzazione o gödelizzazione). Ricordiamo che ogni programma elementare é formato da un numero finito di istruzioni del tipo: Ri = Ri + 1 i 1, n 0 Ri = Ri. 1 IF Ri = 0 GOTO 0 4
Per codificare una istruzione abbiamo bisogno: del suo posto nella sequenza di istruzioni, del suo tipo, dei numeri i ed n che essa contiene. Un modo per codificare queste informazioni é il seguente: Ri = Ri + 1 3 (i. 1) + 1 Ri = Ri. 1 3 (i. 1) + 2 IF Ri = 0 GOTO n 3 J(i. 1, n) dove J : N N N + é la biiezione J(x, y) = (x + y + 1)(x + y) 2 + x + 1 5
Il codice dell istruzione m-esima é usato come esponente per il numero primo p m (p 1 = 2); se il programma ha k istruzioni il suo codice sará 2 y 1... p y k k, oppure y 1,..., y k, dove y 1,..., y k sono i codici delle istruzioni. Esempio 1 Codifichiamo il seguente programma: IF R2 = 0 GOTO 0 3 J(1, 0) = 9 R2 = R2. 1 3 1 + 2 = 5 R1 = R1 + 1 3 0 + 1 = 1 IF R3 = 0 GOTO 1 3 J(2, 1) = 27 e quindi il codice é 2 9 3 5 5 1 7 27, oppure 9, 5, 1, 27. 6
La codifica e la decodifica sono entrambe funzioni biiettive (perche?); ad ogni intero x = 2 y 1... p y m dove y i 0 se 1 i m, > 0 se i = m corrisponde un programma di m istruzioni, in cui la j-esima istruzione é ottenuta dividendo y i per 3 ed individuando resto e quoziente. Esempio 2 Al numero 600 corrisponde il programma: IF R1 = 0 GOTO 0 R1 = R1 + 1 R1 = R1. 1 quale funzione calcola questo programma? 7
Importante: la codifica di un programma produce interi x = 2 y 1,..., p y k k, con y 1,..., y k > 0. Invece, la decodifica di un numero naturale puó produrre situazioni in cui all istruzione j-esima corrisponde y j = 0. Per evitare questo problema, introduciamo l istruzione NOPE (con codice 0) che non fa nulla. Esercizio: quale programma é rappresentato dal numero 2 9 5 5 7 11 27?? Esercizio: Definire una macchina a registri (non elementare) che dati in input due naturali x e y, determini l output che una macchina a registri elementare con codifica x ha per input y. 8
Una enumerazione delle macchine di Turing Realizziamo una corrispondenza biunivoca fra macchine di Turing e numeri naturali. Sia data una macchina M = Γ, b, Q, q 0, F, δ, la cui funzione di transizione é δ : (Q F ) (Γ { b}) Q (Γ { b}) {d, s, i}. Ogni coppia (q, a) per cui la δ non é definita é codificata come (q, a,,, ). Elenchiamo in ordine lessicografico le quintuple che costituiscono la funzione di transizione, introducendo un ordinamento arbitrario sugli insiemi Q { }, Γ { b, }, {d, s, i, }. Questo ordinamento induce un ordinamento fra le quintuple e, di conseguenza, sulle sequenze di quintuple e sulle codifiche di macchine di Turing. 9
Enumerazione delle funzioni ricorsive I metodi definiti determinano una corrispondenza naturali e macchine (di Turing o a registri), ma anche fra funzioni ricorsive e numeri naturali. Sia E : N {M} una biiezione fra i naturali e le descrizioni di macchine di Turing, tale che E(x) = M x, la (x + 1)-esima macchina dell enumerazione. Data una codifica C dei naturali su un opportuno alfabeto (quello di nastro della macchina), definiamo ϕ x (y) = z N se la macchina M x, inizializzata nella configurazione iniziale q 0 C(y), si arresta nella configurazione finale C(y) bq F C(z) indefinita altrimenti. 10
Si ottiene una enumerazione delle funzioni ricorsive ad un argomento (domanda: quale posto occupa la funzione ϕ x in questa enumerazione? la corrispondenza fra naturali e funzioni ricorsive a un posto é una biiezione?) Si puó estendere l enumerazione a funzioni a piú argomenti attraverso una opportuna codifica (definirne una). Il valore x associato alla funzione ϕ x si dice indice della funzione (calcolata dalla macchina M x ). Dato che x é il numero naturale che codifica la macchina M x, esso é anche chiamato il programma che calcola la funzione ϕ x. 11
Proprietá di enumerazioni di funzioni ricorsive L enumerazione ci consente di formulare i risultiti della teoria della ricorsivitá in modo indipendente dalla macchina. Tutta l informazione relativa ad una particolare classe di macchine o programmi é contenuta negli indici delle funzioni, e dá origine ad una enumerazione (magari diversa dalle precedenti) che gode sempre delle stesse proprietá generali. Una dimostrazione fornita assumendo una enumerazione per un certo modello di calcolo diventa valida per tutte le enumerazioni associate ad altri modelli di calcolo. 12
Teorema 3 (esistenza della funzione universale) Sia data una qualsiasi enumerazione delle funzioni ricorsive. Per ogni k N esiste z tale che, per ogni x 1,..., x k : ϕ z (x 1,..., x k, y) = ϕ y (x 1,..., x k ) indefinita se essa é definita, altrimenti. Teorema 4 (s-m-n) Sia data una qualsiasi enumerazione delle funzioni ricorsive. Per ogni m, n 1 esiste una funzione ricorsiva s tale che, per ogni x, y 1,..., y m, z 1,..., z n : ϕ x (y 1,..., y m, z 1,..., z n ) = ϕ s(x,y1,...,y m ) (z 1,..., z n ) 13
Teorema 5 (forma normale di Kleene) Sia data una qualsiasi enumerazione delle funzioni ricorsive. Esistono una funzione ricorsiva U e un insieme di funzioni ricorsive T k tali che, per ogni k N, tutte le funzioni ricorsive di k argomenti sono esprimibili come segue: ϕ i (x 1,..., x k ) = U(µt[T k (i, x 1,..., x k, t) = 0]). Il teorema mostra che una funzione ricorsiva é calcolabile attraverso il calcolo di due funzioni: la prima (il predicato di Kleene) verifica che esista una computazione ammissibile; la seconda, che spacchetta il codice della computazione per restituire il risultato. 14
Funzioni non calcolabili Abbiamo giá introdotto i concetti di funzione calcolabile, non calcolabile, di insieme decidibile e semidecidibile. Possiamo riformulare quanto visto in modo indipendente dal modello di calcolo, avendo introdotto il concetto di enumerazione di funzioni ricorsive. Teorema 6 Sia data una qualsiasi enumerazione delle funzioni ricorsive. Non esiste alcuna funzione ricorsiva g tale che per ogni x e y: g(x, y) = 1 se ϕ x (y) é definita, 0 altrimenti. 15
Teorema 7 Non esiste alcuna funzione ricorsiva g tale che per ogni x: g (x) = 1 se ϕ x (x) é definita, 0 altrimenti. Corollario 8 Sia data una qualsiasi enumerazione delle funzioni ricorsive. Gli insiemi K = {x ϕ x (x)é definita} e K = { x, y ϕ x (y)é definita} non sono decidibili. 16
Teorema 9 Sia data una qualsiasi enumerazione delle funzioni ricorsive. Non esiste una funzione ricorsiva g tale che per ogni x: g(x) = 1 se ϕ x (0) é definita, 0 altrimenti. decidere se un generico programma si arresta su un generico input decidere se un generico programma si arresta avendo come input il proprio codice decidere se un generico programma si arresta con input prefissato sono problemi con la stessa difficoltá. 17
Applicando le tecniche precedenti, si provano i seguenti risultati: Teorema 10 Sia data una qualsiasi enumerazione delle funzioni ricorsive. Non esiste una funzione ricorsiva g tale che per ogni x: g(x) = 1 se ϕ x (0) é costante, 0 altrimenti. Teorema 11 Sia data una qualsiasi enumerazione delle funzioni ricorsive. Non esiste una funzione ricorsiva g tale che per ogni x, y, z: g(x, y, z) = 1 se ϕ x (y) = z, 0 altrimenti. 18
Teorema 12 Sia data una qualsiasi enumerazione delle funzioni ricorsive. Non esiste una funzione ricorsiva g tale che per ogni x, y: g(x, y) = 1 se ϕ x = ϕ y é definita, 0 altrimenti. Dimostreremo che ogni proprietá non banale é indecidibile. Tutte le dimostrazioni precedenti si riconducono alla indecidibilitá del problema della terminazione. Un metodo alternativo consiste nell utilizzare la diagonalizzazione (rifare le dimostrazioni con questo metodo). 19
Indecidibilitá in matematica e informatica Esistono numerosi problemi indecidibili in diversi settori della matematica e dell informatica. Ad esempio, nella teoria dei linguaggi formali: date due grammatiche context-free G 1 e G 2, L(G 1 ) = L(G 2 )? date due grammatiche context-free G 1 e G 2, L(G 1 ) L(G 2 ) =? data una grammatica contenstuale G, L(G) é vuoto? 20
Nell ambito della teoria della programmazione (riferendoci ad un linguaggio specifico, e non ad un modello di calcolo generico): un programma che contiene una dichiarazione di proceduram chiamerá la procedura stessa? una variabile di programma assumerá un particolare valore durante l esecuzione del programma? un programma, in presenza di un particolare input, fornisce un determinato output? due programmi calcolano la stessa funzione? 21
un programma calcola una funzione costante? un programma calcola una funzione totale? Nel campo della matematica: data una formula del calcolo dei prodicati, tale formula é un teorema? data una formula dell aritmetica, tale formula é un teorema della teoria? 22
Esistono casi in cui una funzione é calcolabile, ma non siamo in grado di conoscere il programma che la calcola. Ad esempio: g(x) = 1 se nell espansione di π esistono almeno x 5 consecutivi, 0 altrimenti é sicuramente calcolabile, ma non sappiamo quale sia l algoritmo corretto per calcolarla. 23
Teoremi di Kleene e Rice Teorema 13 (ricorsione o di Kleene) Sia data una enumerazione delle funzioni ricorsive. Se t é una funzione calcolabile totale, allora esiste e N tale che: ϕ e = ϕ t(e). Il teorema si dice anche del punto fisso. Dato un insieme S e una funzione τ : S S, si dice punto fisso di τ il valore s S tale che τ(s) = s. Corollario 14 Sia data una enumerazione delle funzioni ricorsive. Esiste un indice i tale che, per ogni x N si ha ϕ i (x) = i. 24
Teorema 15 (Rice) Sia data una enumerazione delle funzioni ricorsive e sia F un insieme di funzioni calcolabili. L insieme S = {x ϕ x F } é decidibile sse F = oppure F coincide con l intera classe delle funzioni calcolabili. Il teorema sancisce quanto promesso: ogni proprietá non banale delle funzioni calcolabili é indecidibile; I teoremi precedenti sono applicazioni del teorema di Rice. Una conseguenza importante nella teoria della programmazione é che é impossibile provare proprietá delle funzioni calcolate dai programmi (costanza, crescenza, correttezza). 25
Insiemi decidibili e semidecidibili Abbiamo giá introdotto i concetti di insieme decidibile e semidecidibile, con riferimento alla T-calcolabilitá. Possiamo riformulare quanto visto astraendo dal modello di calcolo. Definizione 16 Un insieme A N é detto ricorsivo se la sua funzione caratteristica C A : C A (x) = é ricorsiva totale. 1 se x A, 0 altrimenti 26
Definizione 17 Un insieme A N é detto ricorsivamente enumerabile (r.e.) se A = o se esiste una funzione ricorsiva totale f : N N tale che A = imm(f). In tal caso diciamo che la funzione f enumera l insieme A. Dimostreremo che la classe degli insiemi ricorsivi (risp., ricorsivamente enumerabili) coincide con la classe degli insiemi decidibili (semidecidibili). 27
Esempio 18 l insieme dei numeri pari é ricorsivo? l insieme dei numeri primi é ricorsivo o r.e.? l insieme { y, t ϕ y (y)si arresta in meno di t passi } é ricorsivo? l insieme K = {y ϕ y (y)é definita} é ricorsivo? l insieme Z = { x, y, z ϕ x (y) = z} é ricorsivo? l insieme T = {x ϕ x é totale} é ricorsivo? 28
Forniamo tre proprietá sugli insiemi ricorsivi: Teorema 19 Un insieme S N é ricorsivo sse é decidibile. Teorema 20 Se un insieme A é ricorsivo allora l insieme complemento A = N A é ricorsivo. Teorema 21 Se insiemi A e B sono ricorsivi allora gli insiemi A B e A B sono ricorsivi. 29
Teorema 22 Sia dato un insieme S N; sono equivalenti: 1. S é ricorsivamente enumerabile; 2. S é semidecidibile; 3. S é il dominio di una funzione g S parziale calcolabile; 4. S é l immagine di una funzione h S parziale calcolabile. Conseguenza di questo risultato: (i) gli insiemi ricorsivi sono decidibili, e (ii) la classe degli insiemi decidibili quella dei semidecidibili allora ogni insieme ricorsivo é anche r.e., ed esistono insiemi r.e., ma non ricorsivi. Esempio 23 L insieme K = {x ϕ x (x)é definita} non é ricorsivo, ma é r.e. Infatti K = dom(ψ), dove: ψ(x) = 1 se ϕ x (x) é definita, indefinita altrimenti. 30
Teorema 24 L insieme T = {x ϕ x é totale} non é ricorsivamente enumerabile Teorema 25 Se insiemi A e B sono ricorsivamente enumerabili allora gli insiemi A B e A B sono ricorsivamente enumerabili. Teorema 26 Se un insieme A é ricorsivamente enumerabile e se l insieme complemento A = N A é ricorsivamente enumerabile, allora A é ricorsivo. Come conseguenza di questo teorema, se un insieme é r.e., ma non ricorsivo, allora il suo complemento non é r.e. Questo significa che il complemento di un insieme r.e., ma non ricorsivo, ha delle proprietá di indecidibilitá maggiori dell insieme stesso. 31
Esempio 27 L insieme K = {y ϕ y (y) non é definita} non é r.e. Infatti K é semidecidibile, e quindi r.e.; ma K non é ricorsivo, e quindi K non puó essere r.e. Per verificare se x appartiene a K dobbiamo verificare se esiste y tale che ϕ x (x) si arresta in meno di y passi. Per verificare se x appartiene a K dobbiamo verificare se per ogni y,ϕ x (x) richiede piú di y passi. I predicati ϕ x (x) richiede meno di y passi e ϕ x (x) richiede piú di y passi sono entrambi decidibili. Il predicato esiste y tale che ϕ x (x) richiede meno di y passi é ricorsivamente enumerabile. Il predicato per ogni y ϕ x (x) richiede piú di y passi non é r.e. 32
Il fenomeno vale in generale: Teorema 28 Sia A N non vuoto. A é ricorsivamente enumerabile sse esiste un insieme ricorsivo B N 2 tale che x A sse y[(x, y) B]. Teorema 29 Sia A N. A é il complemento di un insieme ricorsivamente enumerabile sse esiste un insieme ricorsivo B N 2 tale che x A sse y[(x, y) B]. Gli ultimi due risultati possono essere estesi al caso in cui siano usati piú quantificatori esistenziali ed universali alternati. 33
Definizione 30 Per ogni insieme A N, A Σ k se esiste un predicato ricorsivo P (x, y 1,..., y k ) tale che x A sse y 1 y 2... Qy k P (x, y 1,..., y k ), dove Q = per k dispari, Q = per k pari. Definizione 31 Per ogni insieme A N, A Π k se esiste un predicato ricorsivo P (x, y 1,..., y k ) tale che x Asse y 1 y 2... Qy k P (x, y 1,..., y k ), dove Q = per k dispari, Q = per k pari. 34
Definizione 32 Per ogni insieme A N, A k se A Σ k e A Π k. Dalle definizioni deriva che A Σ n se e solo se A Π n. L insieme delle classi Σ k e Π k si chiama gerarchia di Kleene o aritmetica. Σ 0 e Π 0 coincidono con la classe degli insiemi ricorsivi; Σ 1 coincide con la classe degli insiemi r.e.; Π 1 con la classe degli insiemi complemento di insiemi r.e. 35
Due proprietá fondamentali: (i) i[σ i Σ i+1 ] e i[π i Π i+1 ]; (ii) i[σ i Π i Σ i+1 Π i+1 ]. La gerarchia aritmetica é utilizzata per esprimere il livello di indecidibilitá di un insieme; ad esempio, l insieme T = {x ϕ x é totale } coincide con l insieme {x y k[ϕ x (y) richiede meno di k passi]}; quindi T appartiene a Π 2. 36