View
218
Download
0
Category
Preview:
Citation preview
Macchine di Turing ericorsività generale
Esempio di MT
• MT1= (Q, S, , q1, q0)
• Q = {q1; q0}
• S = { | } con una specifica codifica: ogni numero n è rappresentato con n+1 “|”
(q1,|) = (|,d,q1)
(q1,s0) = (|,c,q0)
Tadaan!
Altro esempio di MT
• MT2 = (Q, S, , q1, q0)
• Q = {q1; q0}
• S = { | } con la solita codifica: ogni numero n è rappresentato con n+1 “|”
(q1,|) = (s0,d,q1)
(q1,s0) = (|,c,q0)
Tadaan!
Altro esempio ancora
(q1,|) = (|,d,q1)
(q1,s0) = (s0,d,q2)
(q2,|) = (s0,d,q2)
(q2,s0) = (s0,d,q3)
(q3,|) = (s0,d,q3)
(q3,s0) = (s0,c,q0)
Tadaan!
MT3
Esempi di MT speciali
• MT1 implementa la funzione successore
• MT2 implementa la funzione zero
• MT3 implementa P31...
• ...ed è facile vedere come qualunque Pnk
possa essere implementata con una MT
• Si dice che le funzioni base sono Turing-computabili, o T-computabili
...e le altre funzioni?
• Le altre funzioni si ottengono da quelle base per mezzo di composizione, ricorsione, e minimalizzazione
• Se dimostriamo che queste operazioni conservano la T-computabilità, allora dimostriamo che tutte le funzioni ottenute sono T-computabili
La composizione
• h(x) = fg(x) = f(g(x))
• Se f e g sono T-computabili, lo è anche h?
• Ossia: se esistono MTf e MTg, si riesce a costruire MTh?
• Sì: basta mettere insieme le istruzioni di MTf e di MTg, con l’unico accorgimento di porre q1h = q1g, q0g = q1f, q0f = q0h
La ricorsione
h(0) = kh(s(x)) = g(x,h(x))
• Se g è T-computabile, lo è anche h?• Ossia: avendo a disposizione MTg, si
riesce a costruire MTh?• Sì: è un po’ più complicato che nel caso
della composizione• S include i simboli $1, $2, $3 che sono
usati come separatori
Ricorsione con MT• Per calcolare h(x), MTh inizia scrivendo
sul nasto (k* rappresenta k+1 barre):
• MTh cancella una barra da x*
• Se zero barre tra $2 e $3, l’output è tra $1 e $2 (perché h(0) = k)
• Altrimenti configura il nastro così:
$1 $2 $3k* x*
$1 $2 $3k* (x-1)*| | k*
Codifica di (0,k)
Ricorsione con MT• MTh esegue il programma di MTg sulla
parte a destra di $3:
ottenendo:
dove j* è la codifica di j = g(0,k) = h(1)
h(0) = k
h(s(x)) = g(x,h(x))
$1 $2 $3k* (x-1)*| | k*
$1 $2 $3k* (x-1)*| j*
Ricorsione con MT• MTh cancella una barra tra $2 e $3, se non ci
sono più barre vuol dire che x=1 e quindi l’output è j = g(0,k) = h(1), che si trova a destra di $3:
• Altrimenti nuova configurazione e si ripete:
• Eseguendo MTg a destra di $3 si calcola g(1,h(1)) = h(2)...e così via fino a h(x)
$1 $2 $3k*| j*
$1 $2 $3j* (x-2)*| | j*
codifica di (1,j) = (1,h(1))
| |
La minimalizzazione
• f(x) = il più piccolo y: g(x,y)=0
• Dobbiamo costruire MTf usando MTg
• MTf procede eseguendo iterativamente il codice di MTg per calcolare g(x,0), g(x,1), g(x,2),...g(x,y) e restituisce in output il primo y per cui g(x,y)=0
• Se tale y non esiste MTf non si ferma mai (e infatti f non è definita per quella x)
Minimalizzazione con MT
• MTf configura inizialmente il nastro così:
• Poi copia i dati tra $1 e $2 nello spazio tra $2 e $3 e lì usa il codice di MTg per calcolare g(x,0)
• Se il risultato è zero cancella tutto il resto e lo lascia come output
$1 $2 $3x* |
codifica di (x,0)
Minimalizzazione con MT
• Altrimenti MTf riconfigura il nastro così:
e ripete tutto per calcolare g(x,1)
• ...e così via fino a trovare (eventualmente) il primo y per cui g(x,y)=0
$1 $2 $3x* |
codifica di (x,1)
|
Riassumendo: RG T-computabile
Tadaan!
Riesco a implementare qualsiasi funzione
ricorsiva generale, ossia ottenuta dalle funzioni
base con composizione, ricorsione, e
minimalizzazione.
Dubbio...
Uhm...
Ok: se f è RG, allora esiste una MT che la implementa.
Ma se scrivo una MT arbitrariamente complicata, che tipo di funzione viene
computata?
Risposta: RG T-computabile
• Non esistono funzioni calcolate da una MT che non siano ricorsive generali
• Si può dimostrare che il programma di una qualsiasi MT può essere espresso come una funzione ottenuta dalle funzioni base con i soliti tre metodi
In altre parole: sono uno strumento molto potente ma
non fuoriesco da RG
RG T-computabile
• Dobbiamo dimostrare che ogni funzione computata da una MT è una funzione RG
• Visto che le funzioni RG sono aritmetiche, ossia lavorano con i numeri naturali, dobbiamo innanzitutto codificare gli stati di una MT
Gödelizzazione degli stati di MT• MT con alfabeto Σ = {s1,...,sn} nella
seguente situazione
• u (sinistra) = 22 · 30 · 53 (se nastro vuoto: 1)• v (destra) = 21 · 34 · 57 · 72 · 117
• w (globale) = 2u · 32 · 56 · 7v
s3 s0 s2 s2 s1 s4 s7 s2 s7
q6
Istruzione di MT come funzione
• w è la codifica di uno stato particolare di una MT
• Eseguendo un’istruzione, MT passa da uno stato codificato da w a un altro stato, a cui corrisponde una codifica w’
• Possiamo definire una funzione aritmentica totale:
ρMT(w)=w’ se w codifica uno stato non finale
w altrimenti
La funzione ρMT
• Il determinismo di MT garantisce che a un certo w corrisponda uno e un solo w’, ossia che ρMT sia una funzione
• Si dimostra (ma non lo vedremo) che ρMT è una funzione ricorsiva primitiva
La funzione θMT
θMT(w,0) = w
θMT(w,s(z)) = ρMT(θMT(w,z))
• Se w è la codifica di uno stato di MT, θMT(w,z) è la codifica dello stato che si raggiunge eseguendo z istruzioni di MT
• La funzione θMT è in RP perché è definita per ricorsione a partire da P1
1 e ρMT
Da MT a funzione aritmetica
• Data una MT, come facciamo a ricavare una funzione aritmetica corrispondente?
• Come definire tale funzione sulla base della MT?
Da MT a funzione aritmetica
1. Dato l’input numerico per la funzione, codifichiamo la situazione in cui tale input si trova sul nastro, la testina è nella posizione standard, e la MT è nello stato iniziale q1: otteniamo una codifica w
2. Tramite l’operazione di minimalizzazione, ricaviamo il più piccolo z tale che θMT(w,z) codifica una situazione finale w’
3. Da w’ ricaviamo lo stato del nastro, su cui è presente l’output computato dalla MT, che corrisponderà all’output della funzione aritmetica
Da MT a funzione aritmetica
• Si dimostra che la procedura nel passi 1, 2, e 3 permette di esprimere la funzione computata da una MT tramite tutte e sole le operazioni che generano funzioni ricorsive generali
• Quindi: a ogni MT corrisponde una funzione RG
• Ossia: T-computabile RG
Altro dubbio...
Parlando di me, ci siamo concentrati sulla
T-computabilità......ma come si rapporta la T-computabilità, che è la
caratteristica di tutte le funzioni da me computate col concetto più generale di computabilità?
Recommended