PROBLEMI RISOLUBILI E COMPUTABILITÀ se neanche la macchina di Turing riesce a risolvere un problema, quel problema non è risolubile! Secondo la Tesi di Church-Turing, non esiste un formalismo “più potente” della Macchina di Turing, ossia capace di risolvere una classe più ampia di problemi. Dunque...
QUALCHE DEFINIZIONE PROBLEMA RISOLUBILE Un problema la cui soluzione può essere espressa da una Macchina di Turing o formalismo equivalente. La macchina di Turing calcola funzioni, quindi occorre un modo (semplice) per associare a un problema una funzione.
QUALCHE DEFINIZIONE FUNZIONE CARATTERISTICA DI UN PROBLEMA Dato un problema P, l’insieme X dei suoi dati di ingresso, l’insieme Y delle risposte corrette, si dice funzione caratteristica del problema P la funzione: f P : X Y che associa a ogni dato d’ingresso la corri- spondente risposta corretta.
QUALCHE DEFINIZIONE FUNZIONE CARATTERISTICA DI UN PROBLEMA Perché questo artificio? Perché grazie a questa funzione, decidere se un problema è risolubile equivale a chiedersi se la funzione f P è computabile D’ora in poi parleremo quindi solo di funzioni computabili, sapendo che ciò equivale a parlare di problemi risolubili.
QUALCHE DEFINIZIONE FUNZIONE COMPUTABILE Una funzione f: A B per la quale esiste una Macchina di Turing che –data sul nastro una rappresentazione di x A dopo un numero finito di passi –produce sul nastro una rappresentazione del risultato f(x) B
QUALCHE DEFINIZIONE Attenzione Nel seguito considereremo solo funzioni f: N N questo non è limitativo perché –ogni informazione è necessariamente finita, –quindi può essere codificata in una collezione di numeri naturali –la quale collezione può essere a sua volta espressa con un unico numero naturale mediante il procedimento di Gödel.
IL PROCEDIMENTO DI GÖDEL “Data una collezione di numeri naturali, esprimerla con un unico numero naturale.” Procedimento: Siano N 1, N 2, … N k i numeri naturali dati e siano P 1, P 2, … P k i primi k numeri primi Il nuovo numero R definito come R ::= P 1 N1 · P 2 N2 · … · P k Nk rappresenta univocamente la collezione N 1, … N k grazie all’unicità della scomposi- zione in fattori primi.
COMPUTABILITÀ È noto dall’analisi matematica che l’insieme F = { f: N N } non è enumerabile (cardinalità del continuo) Invece, l’insieme delle Macchine di Turing (e quindi delle funzioni computa- bili) è enumerabile. Infatti, poiché il numero di simboli di ingresso, di uscita e di stati di una TM è finito, ogni Macchina di Turing può essere associata a un numero naturale con il procedimento di Gödel.
COMPUTABILITÀ CONSEGUENZA: la maggioranza delle funzioni NON può essere calcolata!!!
COMPUTABILITÀ Però… le sole funzioni che davvero ci interessano sono quelle che possiamo definire... .. la qual cosa richiede un linguaggio... .. e quindi un alfabeto... .. che è fatto da un numero finito di simboli!
COMPUTABILITÀ Ergo, potremmo sperare che almeno queste si potessero calcolare tutte… … E INVECE NO!! CONSEGUENZA: le funzioni che possiamo realmente defi- nire sono molte di meno, e costituiscono un insieme enumerabile!
FUNZIONI NON COMPUTABILI È facile dimostrare che esistono funzioni definibili ma non computabili e, quindi, problemi non risolubili. ESEMPIO: Problema dell’ halt della macchina di Turing. Dire se una data macchina di Turing T, con un generico ingresso X, si ferma oppure no.
FUNZIONI NON COMPUTABILI Questo problema è perfettamente definito, ma non è computabile (nel caso generale). Dimostrazione Sia M l’insieme di tutte le Macchine di Turing e X l’insieme di tutti i possibili ingressi. Sia poi: – x Xun generico dato di ingresso –m Muna generica Macchina di Turing.
FUNZIONI NON COMPUTABILI La funzione caratteristica f H di questo problema può essere così definita: f H (m,x) = 1, se m con ingresso x si ferma 0, se m con ingresso x non si ferma Dimostreremo che questa funzione è definita ma non computabile, in quanto tentare di calcolarla conduce a un assurdo.
FUNZIONI NON COMPUTABILI Se f H è computabile, deve esistere una Macchina di Turing TF capace di calcolarla. Definiamo allora una nuova funzione g H come segue: dove n è il numero naturale che rappresenta una data Macchina di Turing (procedimento di Gödel). g H (n) = 1, se f H (n,n) = 0 , se f H (n,n) = 1
FUNZIONI NON COMPUTABILI In pratica, con un dato ingresso n: g si ferma e risponde 1 quando f non si ferma g non si ferma e entra in un ciclo infinito quando invece f si ferma. g H (n) = 1, se f H (n,n) = 0 , se f H (n,n) = 1
FUNZIONI NON COMPUTABILI Come caso particolare, sia ora n = n g, ossia prendiamo come ingresso proprio quel particolare numero che rappresenta la Macchina di Turing TG che calcola g H. Questo significa dare come ingresso a TG, come caso particolare, la sua stessa descrizione.
FUNZIONI NON COMPUTABILI Sostituendo si ottiene: che è assurdo, in quanto afferma che: se g vale 1 (e quindi TG si ferma), f vale 0 (e quindi TG non si ferma) se invece g è indefinita (cioè TG non si ferma), f vale 1 (perciò TG si ferma). g H (n g ) = 1, se f H (n g, n g ) = 0 , se f H (n g, n g ) = 1
FUNZIONI NON COMPUTABILI Conclusione: il problema di decidere se una data Macchina di Turing T, con un generico ingresso X, si ferma oppure no non è computabile: È UN PROBLEMA INDECIDIBILE.
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede una funzione biettiva f: N S che mette in corrispondenza i numeri naturali con gli elementi dell’insieme.
INSIEMI NUMERABILI Insiemi che possiedono una funzione biettiva f: N S che mette in corrispondenza i numeri naturali con gli elementi dell’insieme
INSIEMI RICORSIVAMENTE ENUMERABILI La nozione di computabilità porta a intro- durre un concetto più forte: quello di insieme ricorsivamente enumerabile (o semidecidibile) Un insieme S tale che esiste un proce- dimento effettivo per costruirlo ossia esiste una Macchina di Turing T capace di computare la funzione di corrispon- denza f: N S.
INSIEMI RICORSIVAMENTE ENUMERABILI Quindi, la funzione f: N S non deve soltanto esistere
INSIEMI RICORSIVAMENTE ENUMERABILI Quindi, la funzione f: N S non deve soltanto esistere......deve essere computabile!
INTERPRETAZIONE Dire che la funzione f: N S è computabile significa dire che l’insieme S può essere effettivamente costruito (per enumerazione) appunto calcolando elemento per elemento la funzione f.
INSIEMI RICORSIVAMENTE ENUMERABILI ATTENZIONE Il fatto che l’insieme S possa essere costruito NON SIGNIFICA AFFATTO che si possa decidere se un elemento appartiene all’insie- me stesso. Quello è tutto un altro problema!!!
INSIEMI RICORSIVI (o DECIDIBILI) Il problema di decidere dell’appartenenza di un elemento a un insieme porta a introdurre un ultimo concetto: quello di insieme ricorsivo (o decidibile)
INSIEMI RICORSIVI (o DECIDIBILI) Un insieme S è ricorsivo (o decidibile) se la sua funzione caratteristica è computabile ossia... f (x) = 1, se x S 0, se x S
INSIEMI RICORSIVI (o DECIDIBILI) ossia... se esiste una Macchina di Turing capace di rispondere sì o no, senza entrare in un ciclo infinito, alla domanda se un qualsiasi elemento appartiene all’insieme.
INSIEMI RICORSIVI (o DECIDIBILI) TEOREMA 1 Se un insieme è ricorsivo (decidibile) è anche ricorsivamente enumerabile (semidecidibile) ma non viceversa
INSIEMI RICORSIVI (o DECIDIBILI) TEOREMA 2 Un insieme S è ricorsivo (decidibile) se e solo se sia S sia il suo complemento N-S sono ricorsivamente enumerabili (semidecidibili)
VA BENE, PERÒ….... perché ci interessa tanto??
INSIEMI & LINGUAGGI I linguaggi di programmazione sono costruiti a partire da un certo alfabeto e ogni linguaggio è caratterizzato dall’insieme delle sue frasi lecite. Non ci basta che l’insieme delle frasi sia ricorsivamente enumerabile, cioè possa essere generato... (ossia, che si possano generare le frasi “previste”)
INSIEMI & LINGUAGGI I linguaggi di programmazione sono costruiti a partire da un certo alfabeto e ogni linguaggio è caratterizzato dall’insieme delle sue frasi lecite. … è indispensabile anche poter decidere se una frase è giusta o sbagliata senza entrare in ciclo infinito e ciò richiede che l’insieme delle frasi del linguaggio sia ricorsivo (decidibile).
INSIEMI & LINGUAGGI Se così non fosse… il compilatore (o interprete) che deve tradurre le istruzioni del linguaggio in linguaggio macchina potrebbe non rispondere (entrando in un ciclo infinito) nel caso incontrasse una frase errata mentre noi vogliamo che si fermi e segnali l’errore.
LINGUAGGI E PROPRIETÀ Un linguaggio è un insieme di frasi Una frase è una sequenza di simboli appartenenti a un certo alfabeto Un linguaggio deve essere effettivamente generabile Un linguaggio di programmazione deve essere decidibile
ALCUNE DEFINIZIONI Alfabeto V (o vocabolario o lessico) È l’insieme dei simboli con cui si costruiscono le frasi Universo linguistico V* di un alfabeto V È l’insieme di tutte le frasi (sequenze finite di lunghezza arbitraria) di elementi di V. Linguaggio L su un alfabeto V È un sottoinsieme di V*.
LINGUAGGI & GRAMMATICHE Problema: Come specificare il sottoinsieme di V* che definisce il linguaggio? Risposta: Specificando il modo formale e preciso la sintassi delle frasi del linguaggio tramite una grammatica formale
GRAMMATICHE, LINGUAGGI & AUTOMI RICONOSCITORI Grammatiche di diversa struttura comportano linguaggi con diverse proprietà e implicano automi di diversa “potenza computazionale” per riconoscere tali linguaggi.
CLASSIFICAZIONE DI CHOMSKY Le grammatiche sono classificate in 4 tipi in base alla struttura delle produzioni Tipo 0: nessuna restrizione sulle produzioni
CLASSIFICAZIONE DI CHOMSKY Le grammatiche sono classificate in 4 tipi in base alla struttura delle produzioni Tipo 1 (dipendenti dal contesto): produzioni vincolate alla forma: x A y ::= x y con x,y, VT VN)*, A VN,
CLASSIFICAZIONE DI CHOMSKY Le grammatiche sono classificate in 4 tipi in base alla struttura delle produzioni Tipo 2 (libere dal contesto): produzioni vincolate alla forma: A ::= con VT VN)*, A VN,
CLASSIFICAZIONE DI CHOMSKY Le grammatiche sono classificate in 4 tipi in base alla struttura delle produzioni Tipo 3 (grammatiche regolari): produzioni vincolate alla forma ricorsiva A ::= a | aB(ricorsiva a destra) A ::= a | Ba(ricorsiva a sinistra) con A,B VN, e a VT.
CLASSIFICAZIONE DI CHOMSKY In sintesi Tipo 0 (generiche) Tipo 1 (dipendenti da contesto) Tipo 2 (libere da contesto) Tipo 3 (regolari) Generalità Semplicità Automariconoscitore
GRAMMATICHE & MACCHINE PER RICONOSCERE LINGUAGGI I linguaggi generati da grammatiche di tipo 1 (e quindi anche di tipo 2 e tipo 3) sono riconoscibili, ossia esiste un algoritmo per decidere se una frase appartiene o meno al linguaggio. Un tale procedimento non esiste invece, in generale, per grammatiche di tipo 0. Ma… CHI li riconosce?
GRAMMATICHE & MACCHINE PER RICONOSCERE LINGUAGGI Tipo 3 Automa a Stati Finiti (ASF) Tipo 2 Macchina a stack (ASF + stack) Tipo 1 Macchina di Turing con nastro limitato Tipo 0 SE è riconoscibile (può non esserlo), occorre una Macchina di Turing
AUTOMA A STATI FINITI Un macchina astratta molto più semplice di una Macchina di Turing niente nastro niente funzione di direzione, dfn() quindi, niente memoria illimitata! per questo si chiama “a stati finiti” gli stati sono la sua unica forma di memoria che riassume la storia passata spesso descritto con un grafo degli stati
AUTOMA A STATI FINITI dove A = insieme finito dei simboli d’ingresso / uscita S = insieme finito degli stati F = insieme finito degli stati finali (F S) mfn: A S A(funzione di macchina) sfn: A S S(funzione di stato) Formalmente, è definito dalla quintupla: A, S, F, mfn, sfn
AUTOMA A STATI FINITI: ESEMPIO Riconoscimento di un identificatore P = { ::= { | } ::= A | B | C | D |... | Z ::= 0|1|2|3|4|5|6|7|8|9 } Un identificatore corretto deve portare l’automa in uno stato finale di accettazione Un identificatore errato deve portare l’automa in uno stato finale di errore
altro simbolo AUTOMA A STATI FINITI: ESEMPIO S0S1 lettera lettera o cifra S2 cifra o altro simbolo qualunque simbolo stato finale di errore stato finale di accettaz. stato iniziale