Pigreco-day 14 marzo 2014 Matematica e Incertezza Indecidibilità Limiti della calcolabilità Prof. Antonio Iarlori Mathesis Lanciano-Ortona Esempio di funzione effettivamente calcolabile: • dato un polinomio di grado n a coefficienti interi determinare il numero dei suoi zeri interi. • Trovare, cioè, il numero di soluzioni intere dell’equazione a 0 x n a1x n 1 ... a n 1x1 a n 0 x (a 0 x n 1 a1x n 2 ... a n 1 ) a n • Un procedimento meccanico ben determinato per risolvere il problema si ottiene osservando che una soluzione intera deve essere un divisore del termine noto. Trovare le soluzioni intere dell’equazione lineare a coefficienti interi ax by c * c (a , b)q * * ha kb (a , b) * * * x qh , y qk , b * * * *x x n (a , b ) . a y y n (a , b ) c deve essere un multiplo di (a,b) si trovano con l’algoritmo euclideo del MCD due interi h, k tali che valga ** Una soluzione particolare dell’equazione. Tutte le soluzioni al variare di nZ ottenute aggiungendo le soluzioni dell’equazione omogenea associata ax+by=0. Trovare le soluzioni intere delle terne pitagoriche a 2 b2 c2 (a , b, c) 1 cerchiamo le terne primitive * a 2 c 2 b 2 (c b)(c b) c,b sono di opposta parità; c-b, c+b coprimi. Supponiamo a dispari, quindi la scomposizione a (m n) (m n) * *a (m n ) (m n ) 2 2 c b (m n ) 2 c b (m n ) b 2mn c m n 2 2 2 2 sempre possibile. Siano m,n coprimi. Dal confronto tra * e ** somma e differenza tra ° e °° è •Per ciascuno di questi problemi abbiamo diversi algoritmi risolutivi. •In matematica si desidera trovare algoritmi per classi di problemi sempre più ampie. •Negli esempi citati la classe comune è: -Soluzioni intere di un’equazione a coefficienti interi. •Il matematico David Hilbert elencò ventitré problemi di cui il decimo si può formulare così: -esiste un procedimento effettivo (algoritmo) per decidere se, comunque dato un polinomio con coefficienti interi, in un numero finito qualunque di variabili, esso ha radici intere?* * Si parla di “ procedura di decisione”. Nel caso di risposta negativa, si dice che il problema posto è indecidibile. •Per tentare di rispondere a domande di questo tipo dobbiamo prima di tutto tentare di dare una definizione rigorosa di calcolabilità effettiva ( di algoritmo). • • • • • • La Macchina di Turing La Macchina di Turing 1 Sommario • Codifica dei dati • Macchina Astratta • Definizioni • Esempi Macchina di Turing: Struttura (1) • È un apparato costituito da: – un nastro monodimensionale, di lunghezza infinita, suddiviso in celle, ognuna delle quali può essere vuota oppure contenere un solo simbolo. 1 B B 0 B – una testina di lettura/scrittura dei simboli dalle/sulle celle La testina oltre a leggere/scrivere, si può spostare di una cella a sinistra, a destra, oppure può restare ferma. 1 B B B B B – una testina di lettura/scrittura dei simboli dalle/sulle celle La testina oltre a leggere/scrivere, si può spostare di una cella a sinistra, a destra, oppure può restare ferma. 1 B B B B B – una testina di lettura/scrittura dei simboli dalle/sulle celle La testina oltre a leggere/scrivere, si può spostare di una cella a sinistra, a destra, oppure può restare ferma. 1 B B B B B Funzionamento (1) • In ogni fase del calcolo, la testina è posizionata su una cella del nastro, contenente un simbolo si Σ. • La TM può svolgere una operazione atomica: – Leggere il simbolo contenuto della cella. – Scrivere un simbolo (eventualmente vuoto) nella cella. – Spostare la testina di un passo (a sinistra o a destra). – Lasciare la testina ferma. Funzionamento (2) • La successione degli eventi precedenti determina in ogni istante uno e un solo stato della TM (TM deterministica). – siano q1, q2, …, qn i possibili stati (finiti) di una TM. • La configurazione di una TM in un dato istante è la coppia ordinata definita dallo stato corrente qi e dal simbolo sj puntato dalla testina C = < qi, sj> nastro sj qi testina Funzionamento (3) • Ogni TM è programmata per eseguire uno specifico calcolo, cioè dispone delle istruzioni per eseguire quell’unico compito. • Le istruzioni hanno la forma: <configurazione> <operazione atomica> Nello stato qi la testina legge Il simbolo sjnella cella puntata sj qi Passa allo stato qh scrive sulla cella il simbolosk e si sposta a sinistra, a destra, oppure rimane sulla cella sk qh Definizione Formale • Una TM è una 7-pla TM=< Q, Σ, Δ, δ, q0, B, F > – Q insieme finito e non vuoto di stati – Σ alfabeto della macchina – Δ alfabeto di input – δ funzione di transizione δ : (Q x Σ) → (Q x Σ x{L, R, S}) (con L spostamento a sinistra, R a destra, S stop) – q0 Q stato iniziale – B spazio vuoto (blank) = Σ \ Δ. –F Q insieme degli stati finali. Esempio di macchina che TERMINA (T). La MDT SUCCESSORE riceve in input una sequenza 01001… che rappresenta un numero in base 2 e lo incrementa di1. -All’inizio la testina è posizionata sulla cifra più a sinistra; -si muove quindi verso destra finché non trova uno spazio bianco; -va a sinistra di un passo; -se trova la cifra 0 scrive 1 e si ferma; -se trova la cifra 1 scrive 0 e va a sinistra di un passo; -se trova lo spazio bianco B scrive 1 e si ferma. Esempio di macchina che TERMINA (T). La MDT SUCCESSORE Matrice funzionale Istruzioni <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0, q2,1,S> <q1,1, q1,0,L> <q1,B, q2,1,S> 0 1 B q0 0 R q0 1 R q1 B L q1 1 S q1 0 L q2 1 S q0 q1 q2 B 1 q0 1 B B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q2,1,S> <q1,1, q1,0,L> <q1,B,q2,1,S> B 1 q0 1 B B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q2,1,S> <q1,1, q1,0,L> <q1,B,q2,1,S> B 1 1 q0 B B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q2,1,S> <q1,1, q1,0,L> <q1,B,q2,1,S> B 1 1 B q0 B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q2,1,S> <q1,1, q1,0,L> <q1,B,q2,1,S> B 1 1 q1 B B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q2,1,S> <q1,1, q1,0,L> <q1,B,q2,1,S> B 1 0 q1 B B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q2,1,S> <q1,1, q1,0,L> <q1,B,q2,1,S> B 1 q1 0 B B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q2,1,S> <q1,1, q1,0,L> <q1,B,q2,1,S> B 0 q1 0 B B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q2,1,S> <q1,1, q1,0,L> <q1,B,q2,1,S> B q1 0 0 B B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q2,1,S> <q1,1, q1,0,L> <q1,B,q2,1,S> 1 q2 0 0 B B Esempio di macchina che NON TERMINA (NT). La MDT CONTATORE riceve in input il simbolo 0 che rappresenta il numero 0 e lo incrementa di1; quindi incrementa di 1 quest’ultimo e così via scrivendo i numeri naturali in base 2. -All’inizio la testina è posizionata sulla cella che contiene 0; -*si muove quindi verso destra finché non trova uno spazio bianco; -va a sinistra di un passo; -se trova la cifra 0 scrive 1 e ripete da *; -se trova la cifra 1 scrive 0 e va a sinistra di un passo; -se trova lo spazio bianco B scrive 1 e ripete da *. <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> Matrice funzionale q0 q1 0 1 B q0 0 R q0 1 R q1 B L q1 1 R q1 0 L q0 1 R CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B B 0 q0 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,S> <q1,1, q1,0,L> <q1,B,q0,1,R> B B 0 B q1 B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B B 0 q1 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B B 1 B q0 B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B B 1 q1 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,S> <q1,1, q1,0,L> <q1,B,q0,1,R> B B q1 0 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B 1 0 q0 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B 1 0 B q0 B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B 1 0 q1 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B 1 1 B q1 B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B 1 1 q1 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> B 1 q1 0 B B B SUCCESSORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,S> <q1,1, q1,0,L> <q1,B,q0,1,R> B q1 0 0 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> 1 0 q0 0 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> 1 0 0 q0 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> 1 0 0 B q0 B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> 1 0 0 q1 B B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> 1 0 1 B q1 B B CONTATORE <q0,0, q0,0,R> <q0,1, q0,1,R> <q0,B, q1,B,L> <q1,0,q0,1,R> <q1,1, q1,0,L> <q1,B,q0,1,R> 1 0 1 q1 B B B STOP Tesi di Turing Nel 1936 Turing propone la seguente ipotesi di lavoro, nota come Tesi di Turing. •Una Logical Computing Machine (Turing Machine) può eseguire qualunque calcolo puramente meccanico; • se esiste una procedura effettiva per ottenere il valore di una funzione matematica, allora tale funzione è calcolata da una TM. • Ogni algoritmo può essere espresso da un’opportuna TM. •Tutto ciò che è calcolabile lo è attraverso una TM. Gödelizzazione (1) Problema: è possibile trattare una TM1 mediante una TM2? – Le TM elaborano ( ricevono in input) codifiche di numeri naturali. – Se riuscissimo a codificare in numeri naturali il comportamento di una TM1, allora si potrebbe definire una TM2 che elabora la prima. Gödelizzazione (2) Per codificare una TM è necessario codificare opportunamente: – gli stati (finiti); – i simboli dell’alfabeto di input (finiti); – gli spostamenti della testina (finiti); – il blank. Gödelizzazione (3) • Sia una TM provvista: – degli stati q0, q1, q2, …, qn – dell‘alfabeto di input con simboli s1, s2, …, sm – del simbolo di blank s0 (B) – degli spostamenti L, R, S. • Associamo ad ogni elemento un numero dispari nel modo seguente: L R S s0 q0 s1 q1 s2 q2 s3 q3 … ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 1 3 5 7 9 11 13 15 17 19 21 … Gödelizzazione di una Istruzione • Ogni istruzione I può quindi essere associata al numero naturale g(I) (numero di Gödel) I g(I) L’istruzione I= <q1,s3,q2,s1,L> è associata a g(I)=213 319 517 711 111 Gödelizzazione della TM SUCCESSORE. • La TM SUCCESSORE è provvista – degli stati q0, q1, q2 – dell‘alfabeto di input con simboli 0,1 – del simbolo di blank B – degli spostamenti L, R, S • Associamo ad ogni elemento un numero dispari nel modo seguente L R S B q0 0 q1 1 q2 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 1 3 5 7 9 11 13 15 17 Codificazione delle istruzioni della MdT SUCCESSORE L R S B q0 0 q 1 1 q 2 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 1 3 5 7 9 11 13 15 17 I1 <q0,0, q0,0,R> g(I1) = 29∙311∙59∙711∙113 I2 <q0,1, q0,1,R> g(I2) = 29∙315∙59∙715∙113 I3 <q0,B, q1,B,L> g(I3) = 29∙37∙513∙77∙111 * I4 <q1,0,q2,1,S> g(I4) = 213∙311∙517∙715∙115 I5 <q1,1, q1,0,L> g(I5) = 213∙315∙513∙711∙111 I6 <q1,B,q2,1,S> g(I6) = 213∙37∙517∙715∙115 * g(I3) =1.509.541.073.469.000.000.000 Gödelizzazione di una TM • Dal momento che una TM è identificata dall’insieme (finito) delle sue istruzioni, allora è possibile associare a ogni TM uno specifico numero di Gödel g(TM), ottenuto nel modo seguente: – Sia n il numero di istruzioni della TM – Si moltiplichino le n potenze aventi come base i primi n numeri primi, e come esponenti, nell’ordine, i numeri di Gödel delle n istruzioni della TM. g(I1) g( TM) =2 g(I2) ∙3 g(I3) ∙5 g(In) ∙ …… ∙ pn Gödelizzazione di una TM • L’insieme infinito di tutte le MT è decidibile tramite il numero di Gödel g(TM). Dato n N, esiste un algoritmo finito ( MT) per decidere se esso è la codificazione di una MT. • In altre parole, i codici di tutte le MT possono essere ordinati in un elenco infinito. L’insieme di tutte le MT è un insieme enumerabile ( ricorsivamente enumerabile). Gödelizzazione di SUCCESSORE. – Il numero di istruzioni è 6. – Si moltiplicano le 6 potenze aventi come base i primi 6 numeri primi, e come esponenti, nell’ordine, i numeri di Gödel delle 6 istruzioni di SUCCESSORE. g(I1) g( SUCCESSORE) =2 g(I2) ∙3 ∙5 g(I3) g(I4) g(I5) ∙ 7 ∙ 11 ∙ g(I6) 6 Macchina di Turing Universale (1) • È possibile definire una particolare TM (la UTM) capace di simulare il comportamento di qualsiasi altra macchina di Turing M. Macchina di Turing Universale (1) • La UTM è una TM che riceve in input: – la codifica di M = g(M) – l‘input di M che denotiamo con la lettera I. • Per ogni M e per ogni I – La UTM decodifica le quintuple di M ( le istruzioni di M); – le applica a I (input di M) ottenendo così lo stesso output di M con input I. Macchina di Turing Universale (2) • La UTM è in grado di simulare qualsiasi TM • Una TM è una macchina specifica per l’esecuzione di un unico algoritmo • La UTM è un’evoluzione della TM in quanto è programmabile: con essa si può eseguire qualsiasi TM e, quindi, qualsiasi algoritmo • La UTM rappresenta il passo dalla semplice computabilità alla programmazione. Input MT I = 0100.. G(MT) = 100011.. I, G(MdT) UMT Output O =10010 O = 10010 Il problema della Fermata (1) • Stabilire se per ogni MT M e per ogni input I l’esecuzione di M con input I - termina oppure - prosegue all’infinito. • Il problema è indecidibile: – Non esiste alcun ALGORITMO (UTM) che, prendendo in INPUT una generica MT e un suo generico input I, produca in OUTPUT un valore che stabilisce se l’esecuzione di M su I termina o continua all’infinito. Il problema della Fermata (2) • Supponiamo per assurdo che il problema della fermata sia decidibile • Allora (tesi di Church) esiste una TM Halt che riceve in input la codifica g(M) di una generica TM M e un suo generico input I. • Halt produce in output – 1 se il calcolo di M con input I termina (T) – 0 se il calcolo di M con input I non termina (NT) Input M Output T I = 0100.. G(M) = 100011.. NT 1 < I, G(M) > HALT 0 Il problema della Fermata (3) • Ma se esiste Halt come quella definita allora è possibile definire un’altra TM Halt1 che riceve in input g(M) e produce in output – 1 se il calcolo di M con input g(M) termina – 0 se il calcolo di M con input g(M) non termina • Infatti Halt1 è un caso particolare di Halt – Non ha più in input la coppia <g(M), I>, ma il solo elemento g(M) Input G(M) = 100011.. Output T M NT 1 < G(M) > HALT1 0 Il problema della Fermata (4) • Ma se esiste Halt1 come quella definita allora è possibile definire un’altra TM CONF che riceve in input la codifica di una TM g(M) e – produce in output 0, se •Halt1con input g(M) è 0, cioè CONF termina con output 0 se • M con input g(M) non termina. • CONF(g(M)) = 0 se g(M) = NT; – genera un calcolo che non termina se • Halt1 con input g(M) è 1, cioè CONF non termina se • M con input g(M) termina. • CONF(g(M)) = NT se g(M) =T. Input G(M) = 100011.. Output M T NT < G(M) > HALT1 1 0 0 < G(M) > CONF NT Input G(M) = 100011.. Output T M NT NT < G(M) > CONF 0 Il problema della Fermata (5) • CONF è una macchina assurda. • Se applicata a se stessa, cioè eseguita con input uguale alla sua stessa codifica g(Conf) – CONF termina (con output 0) se e solo se CONF non termina; – CONF non termina se e solo se CONF termina. Input G(CONF) = 100011.. Output T CONF NT NT < G(CONF) > CONF 0 MACCHINA M input output I T NT HALT <G(M),I> 1 0 HALT1 G(M) 1 0 CONF G(M) NT 0 CONF G(CONF) NT 0