Complementi Principali risultati di indecidibilit Teorema di ricorsione
Complementi Principali risultati di indecidibilità Teorema di ricorsione e sue conseguenze ' x è totale' è indecidibile "t e: t (e) = e ' x (y) ' è indecidibile e: g(e, x) = e(x) ' x B ' è indecidibile e: e = e(x) self reproducing programs ' x = 0' è indecidibile ' x = y ' è indecidibile
Teorema di ricorsione: offre una giustificazione teorica della procedura di ricorsione h(x, 0) = f(x) h(x, y+1) = g(x, y, h(x, y)) t (e)(x, 0) = f(x) t (e)(x, y+1) = g(x, y, e(x, y)) Se t (e) = e allora ha senso parlare di funzione definita in modo ricorsivo
Applicazione del teorema di ricorsione: Quines (self reproducing programs): Pascal program s; const p='; a='a'; aa='''; '; aaa='a='''; aaaa=''''; aaaaa='begin write(p, aaaa, p, aaa, a, aaa, aa, aa, a, a, aaa, aaaa, a, aaaa, aa, a, a, aaaaa, aaaaa)end. '; begin write(p, aaaa, p, aaa, a, aaa, aa, aa, a, a, aaa, aaaa, a, aaaa, aa, a, a, aaaaa, aaaaa) end. program s; const p= p ' aaaa program s; const p= p '; aa
PREDICATI PARZIALMENTE DECIDIBILI Sebbene ' x (x) ' sia indecidibile, e dunque la sua funzione caratteristica non computabile, la funzione 1 se x (x) f(x) = indef se x (x) è computabile
Un predicato M(x) si dice parzialmente decidibile se la funzione 1 se M(x) vale f(x) = indef se M(x) non vale è computabile partial characteristic function partial decision procedure partially solvable semi-computable
Halting problem ' x (x) ' è parzialmente decidibile 1 se x (x) f(x) = indef se x (x) Halting problem ' x (y) ' è parzialmente decidibile 1 se x (y) f(x, y) = indef se x (y)
1) un predicato decidibile è anche parzialmente decidibile (si genera un loop quando f(x) = 0) 2) ' x (x) ' è parzialmente decidibile 3) ' x (x) ' NON è parzialmente decidibile. Infatti la funzione caratteristica 1 se x(x) f(x) = indef se x(x) ha un dominio che differisce dal dominio di qualunque altra funzione computabile
1 1 (1) 2 (2) 2 3 (3) 3 4 (4) 4 5 (5) 5 6 (6) 6. . f . 1 - - 1 .
Teorema Un predicato M(x) è decidibile sse 'M(x)' e 'not M(x)' sono parzialmente decidibili dim Se 'M(x)' è decidibile lo è anche 'not M(x)', e dunque sono entrambi parzialmente decidibili. Viceversa se 'M(x)' e 'not M(x)' sono parzialmente decidibili, allora esistono F e G tali che o F o G converge: F G 'M(x)' vale 'not M(x)' vale Ora faccio girare F e G un passo alla volta finchè si ferma o l'uno o l'altro. Se si ferma F vale M(x). Se si ferma G vale not M(x).
INSIEMI RICORSIVI E RICORSIVAMENTE ENUMERABILI A = {2, 13, 179, 254, 325} Assegnato x ℕ costruiamo un programma che decide se x A o meno
Sia A un sottinsieme di N. La sua funzione caratteristica è 1 se x A 0 se x A CA(x) = L'insieme si dice ricorsivo se CA è computabile, cioè se 'x A' è decidibile Un insieme è ricorsivo se si può decidere sull'appartenenza di un suo elemento
Esempi di insiemi ricorsivi N l'insieme dei numeri pari ogni insieme finito L'insieme si dice ricorsivamente enumerabile se CA è parzialmente computabile, cioè se 'x A' è semidecidibile in altre parole, come vedremo nel seguito:
Esempio di insieme ricorsivamente enumerabile Esempi di insiemi non ricorsivamente enumerabili {x: x (x) } {x: x è totale}
Teorema - {x: x è totale} non è r. e. dim. Sia per assurdo f(n) una funzione che enumera le funzioni totali; cioè f(0) f(1). . . f(n). . . è una enumerazione. Costruiamo g(n) = f(n) +1 che è totale computabile, e dunque dovrebbe stare nell’elenco; ma essa è diversa da ogni funzione dell’elenco. Da cui la contraddizione
Un insieme ricorsivamente enumerabile in pratica è un insieme A = {h(0), h(1), h(2), . . . } nel quale gli elementi possono essere contati, dove h è una funzione totale computabile 0 1 2 3 4 h(0) h(1) h(2) h(3) h(4) . . . 1 2. . e = h . . .
Gli insiemi ricorsivamente enumerabili sono gli insiemi effettivamente generabili mediante una procedura algoritmica. La procedura genererà, di tanto in tanto e non necessariamente ad intervalli di tempo regolari, un numero da aggiungere alla lista h(0) = 1º numero generato dalla procedura h(1) = 2º numero generato dalla procedura h(2) = 3º numero generato dalla procedura. . h(n) = (n+1)º numero generato dalla procedura
Esempio: L'insieme degli x tali che una tratta di x '7' consecutivi nella scomposizione di è ricorsivamente enumerabile Usando la serie di Hutton, che genera una alla volta tutte le cifre di , controllo quando escono dei '7'. Quando esce una tratta di '7' di lunghezza x la metto nell'insieme
Cenni sugli altri modelli di computazione Gödel-Herbrand-Kleene (1936) calcolo equazionale Church (1936) calcolo Gödel-Kleene (1936) funzioni parziali ricorsive R Turing(1936) macchina di Turing TC Post (1943) sistemi di deduzione Markov (1951) riscritture di stringhe Shepherdson-Sturgis(1963) modello RAM C
Risultato fondamentale: Ciascuno dei modelli sopra esposti, ideati per caratterizzare il concetto di computazione effettiva, porta allo stesso insieme di funzioni computabili, l'insieme C già visto, poichè esistono dei teoremi di equivalenza tipo C=R C=T
T Turing calcolabili (Macchina di Turing) C R funzioni parziali ricorsive (Gödel-Kleene) RAM calcolabili Insieme delle funzioni calcolabili Church calcolabile ( calcolo) Post calcolabile (sistemi di deduzione) Gödel-Herbrand-Kleene calcolabile (calcolo equazionale) Markov calcolabile (riscritture di stringhe)
Conseguenza del risultato fondamentale è la Tesi di Church-Turing L'insieme delle funzioni intuitivamente ed effettivamente calcolabili concide con la classe C delle funzioni RAM-calcolabili (la classe R delle funzioni Parziali Ricorsive) (la classe T delle funzioni Turing computabili ecc. ) : :
Osservazioni 1. La Tesi di Church-Turing non è e non può essere un teorema 2. è giustificata dal fatto che partendo da diversi approcci alla computazione si giunge sempre allo stesso insieme di funzioni calcolabili, dati i teoremi di equivalenza tra le classi 3. nessuno ha mai mostrato un esempio di una funzione effettivamente calcolabile, che non lo sia nel modello RAM
L'accettazione della tesi di Church Turing offre allora una nuova tecnica di dimostrazione della computabilità di una funzione, denominata Dimostrazione mediante Tesi di Church-Turing: Fornire un algoritmo informale (che deve essere però rigoroso e non ambiguo) per illustrare il computo di una certa funzione. A questo punto, invocando la Tesi di Church-Turing si conclude immediatamente che la funzione è RAM-computabile
Gödel-Kleene (1936) funzioni -ricorsive e funzioni parziali ricorsive Partiamo ricordando l'insieme già visto delle funzioni Primitive ricorsive Definizione La classe PR delle funzioni Primitive Ricorsive è la più piccola classe di funzioni totali che contiene le funzioni base 0, x+1 Uin ed è chiusa rispetto le operazioni di sostituzione e ricorsione primitiva. Manca la funzione di Ackermann, per la quale bisogna introdurre la minimazione illimitata
Nell'introdurre la minimazione illimitata, Gödel-Kleene si riferirono inizialmente alle sole alle funzioni totali Definizione La classe R 0 delle funzioni -ricorsive è la più piccola classe di funzioni totali che contiene le funzioni base 0, x+1 Uin ed è chiusa rispetto le operazioni di sostituzione, ricorsione e minimazione illimitata (quando generi funzioni totali).
Abbiamo già spiegato che tale impostazione non è sufficiente, poichè si può costruire la funzione e(x) = f(x) = x(x) + 1 che è banalmente calcolabile, ma che non lo sarebbe nel modello, poichè e(e) = e(e) + 1 e l'unica possibilità è che e(e) non sia definito, il che equivale a introdurre le funzioni parziali. Ovviamente si ha l'inclusione PR R 0
Gödel-Kleene (1936) funzioni -ricorsive e funzioni parziali ricorsive Definizione La classe R delle funzioni parziali ricorsive è la più piccola classe di funzioni parziali che contiene le funzioni base 0, x+1 Uin ed è chiusa rispetto le operazioni di sostituzione, ricorsione e minimazione illimitata Ovviamente si ha l'inclusione PR R 0 R
Ackermann Funzioni Primitive Ricorsive PR Funzioni parziali R 0 Funzioni -Ricorsive R Funzioni Parziali Ricorsive Funzioni totali
Teorema R=C dim. R C segue immediatamente dai teoremi già visti sulla computabilità delle funzioni base, della sostituzione, della ricorsione e della minimazione illimitata. C R in questo caso, data una funzione f(x) computata da un programma P = I 1, I 2, . . . , IS bisogna associare delle funzioni alla computazione P(x)
contenuto del registro R 1 dopo t passi della computazione P(x), se P(x) non è andata a convergenza c(x, t) = il contenuto finale del registro R 1 se P(x) è andata a convergenza in t o meno passi indice della prossima istruzione dopo t passi, se P(x) non è andata a convergenza j(x, t) = 0 se P(x) è andata a convergenza in t o meno passi
Se f(x) è definita, P(x) converge dopo e si ha t 0 = t(j(x, t)=0) f(x) = c(x, t 0) = c(x, t(j(x, t) = 0) Se f(x) non è definita, P(x) diverge e t(j(x, t) In ogni caso si ha = 0) non è definita. f(x) ~ c(x, t(j(x, t) = 0)) e quindi basta dimostrare la computabilità di c(x, t) e j(x, t) del tutto identiche alle funzioni usate per dimostrare la computabilità della funzione universale
- Slides: 31