Sei sulla pagina 1di 11

Macchine di Turing per funzioni ricorsive

Gabriele Balletti, Mario De Simoni 7 Giugno 2013

Macchine di Turing
linsieme degli stati Qk = {n N|n k }; linsieme dei segni o alfabeto S = { , 0 , 1 , , , ( , ) };

Denizione. Sia k N, si deniscono:

linsieme dei versi (left/right) V = {l = 1, r = +1}. Una macchina di Turing ` e un sottoinsieme di quintuple T Qk S S D Qk che sia funzionale rispetto alle prime due componenti. Osservazione. Convenzionalmente si pu` o scegliere linsieme degli stati in modo minimale, ossia tale che per ogni n Qk esista t T tale che 1 (t) = n. inoltre, imponendo le seguenti relazioni su S <0<1< , <( < ) si pu` o ordinare totalmente ogni macchina di Turing in maniera lessicograca. Denizione. Un nastro ` e una funzione N : Z S tale che linsieme N = {m Z|N (m) = } sia nito. Si denisce inizio del nastro il numero I (N ) = min N e N linsieme dei nastri.

Azione del gruppo Z su N Dato h Z, denita la traslazione h : n Z n h Z, sia h : N N N N h . Si noti che, data levidente inveritibilit` a di h , si ha che h ` e un elemento dellinsieme S(N ) delle permutazioni di N in s e. Conseguentemente risulta ben denito lomomorsmo : Z S(N ) h h . Tale ` e dunque unazione del gruppo Z su N . Dora innanzi saranno detti equivalenti nastri appartanenti alla stessa orbita. Scrittura su un nastro Una generica macchina di Turing agisce su un nastro in lettura, ossia su una tripla O = (N, z, q ) dove N ` e un nastro, z un numero intero detto puntatore e q uno stato della macchina. Sia T una macchina di Turing e O0 = (N0 , z0 , q0 ) un nastro in lettura in posizione iniziale, ovvero tale che z0 = I (N0 ) e q0 = 0. I seguenti passi deniscono la scrittura di T su N : se esiste t T tale che 1 (t) = qi e 2 (t) = Ni (zi ) allora Oi+1 = (Ni+1 , zi+1 , qi+1 ) dove Ni+1 (n) =

3 (t)

Ni (n)

se n = zi se n = zi

zi+1 = zi + 4 (t) qi+1 = 5 (t) In caso contrario la scrittura termina con la tripla Oi . Nel caso in cui tale algoritmo termini dopo k + 1 iterazioni, la tripla Ok viene detta output della macchina T con input O0 e viene denotata con T (O0 ); in particolare, si scrive T (N ) in luogo del nastro Nk .

Macchine equivalenti Si denisce la relazione fra nastri in lettura: (N, n, q ) (M, m, p) q = p e h Z tale che
M m

= h (N ) = h (n)

Tale relazione ` e ovviamente una relazione dequivalenza. Osservazione. (N, n, q ) (M, m, q ) T (N, n, q ) T (M, m, q ) Infatti basta mostrare che, ad ogni iterazione, gli output parziali sono equivalenti. Questo vale poich` e
3 (t) se n = ni Ni+1 (n) = Ni (n) se n = ni

Mi+1 (n + h) = Mi+1 (m) =

se n + h = ni + h Mi (n + h) se n + h = ni + h
3 (t)

3 (t)

se m = mi Mi (m) se m = mi

e ni+1 = ni + 4 (t) ni+1 + h = ni + h + 4 (t) mi+1 = mi + 4 (t). Denizione. La seguente condizione denisce una relazione dequivalenza fra le macchine di Turing: T1 T2 T1 (O) T2 (O) per ogni O sul quale T1 e T2 producono un output

Ci` o permette di interpretare una classe di equivalenza [T ] come una funzione denita sullinsieme D[T ] = {[O] (N Z Z)/ | [T (O)] ` e denito } [T ] : D[T ] (N Z Z)/ [O] [T (O)]

Funzioni calcolabili

Dato k N, sia inputk : Nk (N Z Z)/ la funzione che associa ad un vettore v Nh un determinato nastro in lettura copiando il numero sul nastro (fra parentesi se si tratta di un numero naturale, altrimenti come abitualmente scritto se k -upla), inizializzando il puntatore sulla parentesi aperta allo stato 0. Le regole di sintassi sono chiaramente quelle usuali. Si consideri per esempio, input2 ((101, 11)) = [(N, z, q )], dove: q := 0 z := 0 N (0) := ( N (1) := 1 N (2) := 0 Si ottiene quindi un nastro del tipo: [N ] = . . . (101,11) ... La funzione inputk ha una funzione inversa, denotata con output, che associa al nastro in lettura output di una generica macchina il numero naturale scritto fra le parentesi. Denizione. La funzione f : Nk N ` e detta calcolabile se esiste una classe di macchine di Turing [T ] tale che per ogni x Nk si ha che f (x) = (output T inputk )(x) dove T [T ]. Una macchina che calcola f sar` a denotata con Tf . Ecco uno schema del procedimento eseguito: Tf Nk inputk (N Z Z)/ output N N (3) := 1 N (4) := , N (5) := 1 N (6) := 1 N (7) := ) N (j ) := altrimenti.

Funzioni ricorsive

Denizione. La classe delle funzioni ricorsive costituisce la pi` u piccola classe k R di funzioni N N tali che: 1. La funzione nulla z: N N x0 appartiene a R, 2. la funzione successore succ : N N xx+1 appartiene a R, 3. k N, 1 i k, la funzione proiezione k,i : Nk N x xi appartiene a R, 4. se f : Nk N e gi : Nh N per i = 1 . . . k appartengono a R, allora la composizione f (g1 , . . . , gk ) : Nh N appartiene a R, 5. se f : Nk N e g : Nk+2 N appartengono a R, allora la funzione hk = reck (f, g ) : Nk+1 N (x, y )
f (x)

se y = 0 g (x, z, h(x, z )) se y = z + 1

Le funzioni dei primi tre punti sono chiamate funzioni ricorsive primitive. Si osservi che le ultime due condizioni si possono riformulare nel modo seguente: 4. per ogni k, h N esiste un operatore, detto operatore di composizione,
N NN . . . NN NN cmpk h: N k volte
k h h h

(f, g1 , . . . , gk ) f (g1 , . . . , gk ) tale che se f, g1 . . . , gk R allora cmpk h (f, g1 . . . , gk ) R 5

5. per ogni k N esiste un operatore, detto operatore di ricorsione, reck : NN NN (f, g ) dove hk = reck (f, g ) : Nk+1 N (x, y )
f (x)
k k+2

NN reck (f, g )

k+1

se y = 0 g (x, z, hk (x, z )) se y = z + 1

tale che per ogni k N se f, g R allora reck (f, g ) R

Le funzioni ricorsive sono calcolabili

Lo scopo di questa sezione ` e quello di mostrare che ogni funzione ricorsiva ` e calcolabile. A tale ne si esibiscono macchine di Turing per ciascuna delle funzioni primitive e si mostra che ` e possibile assemblare tali macchine in modo da calcolare la composizione e la ricorsione delle funzioni primitive1 . La macchina Tz
0 1 1 2 2 2 ( 0 1 0 1 ) ( 0 0 ) ) ) r r r r r r 1 2 2 3 3 5 3 3 3 4 4 5 0 1 ) r r l l ) ) l 0 0 l 3 3 4 4 5 6

La macchina Tsucc
0 1 1 1 2 3 3 ( 0 1 ) 0 0 1
1

( 0 1 ) 1 0 1

r r r l l l l

1 1 1 2 3 3 3

3 4 2 5 5 5 6

( ( l r 1 0 l 1 0 l 0 1 l ( 1 l ( l

4 7 5 5 3 6 4

Per vericare la validit` a dei codici proposti, copiabili cliccando sul nome della macchina relativa, abbiamo usato il simulatore che si trova alla pagina morphett.info/turing/turing.html.

La macchina T La seguente macchina calcola la funzione k,i .


0 0 0 0 [ i 3] [ i 3] [ i 3] [ i 3] [ i 2] [ i 2] [ i 2] [ i 2] [ i 1] [ i 1] [ i 1] [ i 1] [ i 1] [ [ [ [ [ [ [ [ [ i i i i ] ] ] ] ( 1 0 , ... ( 1 0 , ( 1 0 , ( ( 1 0 , ) 0 1 , ) ( 1 0 ) ) r r r r r r r r r r r r l [ i 3] [ i 3] [ i 3] [ i 2] [ i 2] [ i 2] [ i 2] [ i 1] [ i 1] ; s e i =1 i l c o d i c e i n i z i a qua [ i 1] [ i 1] [i] [ i +1] [i] ; s e i e l u l t i m a componente , q u e s t a [i] ; parte viene ignorata [i] i +1] i +1] i +1] i +1] i +1] i +2] r r r r 0 0 0 1 ; q u e s t i i 1 c i c l i c a n c e l l a n o l e prime ; i 1 componenti

r r r l [ [ [ [ [ [

i +1] i +1] i +1] i +1] i +1]

0 0 l 1 1 l l ) ) l ( ( l

[ i +2]

r [ i +3]

Per esempio la proiezione 5,3 ` e calcolata dalla seguente macchina T5,3


0 0 0 0 1 1 1 1 2 2 2 2 ( 1 0 , ( 1 0 , ( ( 1 0 , ( 1 0 ) r r r r r r r r r r r r 0 0 0 1 1 1 1 2 2 2 2 3 2 ) ) l 4 3 3 3 3 4 4 4 4 4 5 0 1 , ) r r r l 3 3 3 4 4 4 4 4 5

0 0 l 1 1 l l ) ) l ( ( l

r 6

Una macchina per la composizione Osservazione. Data una macchina Tf relativa ad una funzione calcolabile f , [Tf ] il cui stato nale ` e sempre possibile scegliere un rappresentante Tf q sia unico, massimo tra tutti gli stati della macchina ed indipendente dal nastro in lettura: a tale scopo ` e suciente considerare la macchina Tf come la macchina Tf a cui sono state aggiunte alcune quintuple richiamate da tutti gli stati nali della macchina Tf e richiamanti un unico stato nale q che non . sia uno stato di Tf e che sia massimo tra gli stati di Tf Dora innanzi, laddove sar` a necessario comporre macchine, si sceglieranno rappresentanti di macchine soddisfacenti tale propriet` a.
k (f, g ) produce f g . Se k = 1 loperatore C1 Avendo a disposizione una macchina Tf che calcola f e una macchina Tg che calcola g , si denisce Tf g = Tf Tg , dove, se la macchina Tg si ferma allo stato q , Tf si ottiene da Tf aggiungendo q alla prima e ultima coordinata di ciascuna quintupla. k h h k In generale, dato loperatore Ch : NN (NN )k NN , considerate generiche funzioni calcolabili f, g1 , . . . , gk , si descrive il funzionamento della macchina k che calcola Ch (f, g1 , . . . , gk ) in un elemento arbitrario x Nh :

1. si applica la funzione inputh (x) 2. grazie a unopportuna macchina k -plicatrice Dk si ottiene il nastro il cui output ` e lelemento (x, . . . , x) (Nh )k 3. unulteriore macchina riscrive loutput precedente come una k -upla di h-uple del tipo: ((x), (x), . . . , (x)) 8

4. si fanno agire nellordine le macchine Tgi opportunamente modicate per essere unite alla macchina senza collidere con le quintuple gi` a presenti, ciascuna sulli-esima componente dopo averla isolata cancellando le eventuali parentesi o virgole che separano la h-upla in questione dal resto del nastro. Nel caso in cui la macchina Tgi abbia bisogno di spazio a destra o a sinistra si inseriscono quintuple (le macchine di traslazione parziale) che alloccorrenza traslano la parte di nastro a destra o a sinistra di una posizione 5. al termine della scrittura di Tgk unopportuna macchina spazzina TAMIU che cancella spazi e parentesi intermedi riportando un nastro il cui output ` e un elemento di Nk 6. a questo punto Tf agisce sul nastro in lettura uscente 7. il nastro nale viene interpretato da output e reso un elemento di N. Di seguito sono riportati come esempio i passi parziali eettuati dalla macchina relativa al calcolo di f (z, succ)(1). Link 1. input1 (1) = . . . (1) . . . 2. . . . (1,1) . . . 3. . . . ((1),(1)) . . . 4. . . . (1) (1)) . . . . . . (0) (1) . . . . . . (0) (1) . . .

. . . (0)(10) . . . . . . (0) (10) . . . 5. . . . (0,10) . . .

6. Tf (. . . (0,10) . . .) 7. f (0, 10) N Una macchina per la ricorsione In generale, dato loperatore reck : NN NN NN e considerate k due generiche funzioni calcolabili f : N N e g : Nk+2 N si descrive il funzionamento della macchina che calcola reck (f, g ) in un elemento arbitrario (x, y ) Nk+1 1. si applica la funzione inputh ((x, y )) 2. si eettua un controllo sul numero che compare pi` u a destra prima della parentesi chiusa: 2.1. se y > 0 si pone una virgola al posto della parentesi chiusa e si copia la parte di nastro compresa tra la prima parentesi aperta a sinistra e tale virgola (x, y, (x, y si sottrae 1 dallultimo numero a destra ottenendo (x, y, (x, y 1 si chiude la parentesi e si ritorna al punto 2 2.2. se y = 0 si copia x alla destra di 0 creando la terna (x, y, x) e si passa al punto 3. 3. si applica Tf allultima componente dellunica terna scritta ottenendo (x, y, f (x)). Nel caso in cui serva spazio intervengono le macchine di traslazione parziale. 4. si applica Tg alla terna (sempre con laiuto delle macchine di traslazione parziale) ottenendo un generico elemento (t) che viene attaccato alla parte di nastro alla sua sinistra (ricordando che a destra non ` e scritto nulla) e, se ci sono altri elementi scritti a sinistra della parentesi aperta immediatamente precedente si ottiene una nuova terna e si torna al punto 4, altrimenti la terza componente ` e loutput della macchina. 5. il nastro nale viene interpretato da output e reso un elemento di N. 10
k k+2 k+1

Di seguito sono riportati alcuni passi parziali eettuati dalla macchina relativa 1 3 al calcolo della somma di due numeri interi, sum = rec2 (1 , succ 1 )((10, 10)) Link 1. input2 ((10,10)) = . . . (10, 10) . . . 2.1. dato che nella seconda variabile compare 10 > 0 si ottiene ... (10,10,(10,10 . . .

da cui sottraendo 1 allultimo numero a destra e chiudendo la parentesi si ha . . . (10,10,(10,1) . . . 2.1. si ripete lo stesso procedimento precedente dato che nella seconda variabile compare 1 > 0 ottenendo . . . (10,10,(10,1,(10,0) . . . 2.2. dato che y = 0 si ha ... (10,10,(10,1,(10,0,10) . . .

1 che in questo caso ` 3. si applica T1 e una macchina che non eettua variazioni quindi il nastro rimane inalterato

3 4. si applica Tg dove g = succ 1 alla terna e si compatta ottenendo

. . . (10,10,(10,1,11) . . . 4. nuovamente si applica Tg alla terna e si compatta ottenendo . . . (10,10,100) . . . 4. non essendoci altri elementi a sinistra della parentesi aperta si ottiene il risultato sulla terza componente . . . (100) . . . 5. output(. . . (100) . . .) = 100 N.

11

Potrebbero piacerti anche