macchine di turing e ricorsività generale. esempio di mt mt1= (q, s,, q 1, q 0 ) q = {q 1 ; q 0 } s...

26
Macchine di Turing e ricorsività generale

Upload: cipriana-nicolosi

Post on 01-May-2015

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

Macchine di Turing ericorsività generale

Page 2: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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!

Page 3: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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!

Page 4: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 5: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 6: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

...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

Page 7: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 8: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 9: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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)

Page 10: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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*

Page 11: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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))

| |

Page 12: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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)

Page 13: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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)

Page 14: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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)

|

Page 15: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

Riassumendo: RG T-computabile

Tadaan!

Riesco a implementare qualsiasi funzione

ricorsiva generale, ossia ottenuta dalle funzioni

base con composizione, ricorsione, e

minimalizzazione.

Page 16: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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?

Page 17: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 18: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 19: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 20: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 21: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 22: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 23: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

Da MT a funzione aritmetica

• Data una MT, come facciamo a ricavare una funzione aritmetica corrispondente?

• Come definire tale funzione sulla base della MT?

Page 24: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 25: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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

Page 26: Macchine di Turing e ricorsività generale. Esempio di MT MT1= (Q, S,, q 1, q 0 ) Q = {q 1 ; q 0 } S = { | } con una specifica codifica: ogni numero n

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à?