Macchina di Turing
Transcript
Macchina di Turing
Macchina di Turing Nastro di Input .......... ! ! ! a b b a b ! ! ! testina st sr Unità di Controllo qi Q qj P S/D/F ! ........... Definizione Formale Una macchina di Turing deterministica è una sestupla < !, ", Q, q0, Z, # > $ ! - Alfabeto esterno o dei simboli di nastro " - Simbolo speciale che indica cella vuota "%! Nastro di Input .......... ! ! a ! b b ! a b ! ! ! testina Q - Un insieme finito e non vuoto di stati st s r q0 - stato iniziale ! Unità di Controllo q0 % Q # - Funzione (parziale) di transizione definita come: ! ! Q qj !Z - Insieme di stati finali (halting states) ! qi # : (Q - Z) x ( ! & {" }) ' Q x ( ! & {" }) x {S, D, F} avendo indicato con S uno spostamento a Sinistra della Testina, con D uno spostamento a Destra e con F nessuno spostamento P S/D/F ........... Configurazione di una MT Una configurazione di una MT rappresenta la più piccola porzione di nastro contenente tutti i simboli non ! includente la cella cui è posizionata la testina ad eccezione di qualche simbolo ! che si trova “immerso” in una stringa. qi ! abbreviata con ! a b b ! b a a qi b b ! b a formalmente una configurazione è una stringa x q y in cui: x " # (#$ !)*${%}, q " Q, y " (#$ !)*#${!} la condizione x = % equivale a dire che alla sinistra di q non vi è alcun simbolo ovvero compaiono solo simboli !, mentre se y =!, sulla cella dove è puntata la testina ed alla destra della testina compaiono simboli !. Configurazioni notevoli Configurazione iniziale E’ caratterizzata dalla stringa ! ! !! x = !, q = q , 0 x q y con y " #+$ { % } Configurazione finale E’ caratterizzata dalla stringa x q y con !! x " # (#$ %)*${!}, q " Z, y " (#$ %)*#${%} Per come è definita la matrice di transizione &, una macchina che si trovi in una configurazione finale non può effettuare ulteriori passi di computazione. Ciclo di macchina o transizione E’ il meccanismo di base per il passaggio da una configurazione i-esima ad una configurazione i+1-esima. Ad ogni ciclo viene cambiato il simbolo contenuto nella cella esaminata con un altro simbolo (eventualmente lo stesso), il simbolo di stato (eventualmente lo stesso) e lo spostamento della testina a Sinistra (S) Destra (D) oppure nessun movimento (F). Ci |! Ci+1 Più formalmente: 1. Ci = x q a y e se "(q,a) = (q’, a’, D) allora Ci+1 = x a’ q’ y 2. Ci = x q a e se "(q,a) = (q’, a’, D) allora Ci+1 = x a’ q’ # 3. Ci = x a q b y e se "(q,b) = (q’, b’, S) allora Ci+1 = x q’ a b’ y 4. Ci = q b y e se "(q,b) = (q’, b’, S) 5. Ci = x q a y e se "(q,a) = (q’,a’, F) allora Ci+1 = q’ # b’ y allora Ci+1 = x q’ a’ y Computazione Una successione di transizioni stabilisce una computazione o calcolo C0 |! C1 .......... |! Cn Vedremo nel prosieguo come una computazione può essere infinita o arrestarsi in una configurazione finale. Esempio 1 Funzione di transizione Calcolo del successore di un numero naturale Si somma 1 all’ultima cifra, se questa è = 9 si mette 0 e si riporta 1. Ex 1: q 1 4 8 |# 1 q 4 8 | # 1 4 q 8 |# 1 4 8 q " 0 0 0 0 |# 1 4 q 8 |# 1 4 q 9 1 # Ex 2: q 3 8 9 |# 3 q 8 9 |# 3 8 q 9 |# 3 8 9 q " 0 0 0 0 |# 3 8 q 9 |# 3 q 8 0 |# 3 q 9 0 1 1 # " ! q q 0 D 1q # 1 D 2q # 2 D 3q # 3 D 4q # 4 D 5q # 5 D 6q # 6 D 7q # 7 D 8q # 8 D 9q # 9 D 0S 0 S q 1 1 1q # Esempio 2 Contatore di una sequenza di caratteri. Viene impiegato un cursore q0 per scorrere la stringa verso destra Funzione di transizione fino a trovare un carattere ", si passa quindi allo stato q1 che ! q0 q1 q q2 2 cancella un carattere e ci riporta tramite un cursore q2 verso sinistra 0 D q# 1 q0 dove viene attivato un contatore che conteggia il carattere tolto. 1 D q# 2 q0 2 D q## 3 q0 3 D q## 4 q0 4 D 5 q0 |# a a q1 a |# a q2a " |# q2 a a |# q2 " a a 5 D q# q# q## qq # 6 D qq# 7 q0 |# q01 a a |# 1 q0 a a |# 1 a q0 a |# 1 a a q0 " 7 D 8 q0 8 D q# q q#qq## # 9 D " S q1 a D Es: q0 a a a |# a q0 a a|# a a q0 a |# a a a q0" |# 1 a q1a |# 1 q2a " |# q21 a |# q0 2 a |# 2 q0 a |# 2 a q0" |# 2 q1a |# 2 q2" |# q22 " |# q0 3 |# 3 q0 " |# q13 |# q#3 qq# # q# "Sq2 6 q0 9q0 0S 1 q0 S Esempio 3 Somma di due numeri, separati dal carattere *, dati come sequenza di caratteri | Funzione di transizione 1. Mette " al posto di | e passa allo stato q2 ! 2. Va destra fino a trovare " 3. Mette | e passa a q1 x 4. Va a sinistra fino ritrovare ", passa a q0 e reitera dal punto 1 ................. Alla fine tutti i caratteri | sono alla destra di * la macchina cancella * e si ferma. " q0 D |# " | | q2 | * | | |# " | | q1 | * | | | |# " | q1 | | * | | | |# q0 | | | * | | | |#* q1" * | | | | | | |# q0* | | | | | | D * " q# S D |# " | | | q1* | | | |# q# | | | | | | | q1 S |# " | | |q2 * | | |# " q1 | | | * | | | Dq0 "Dq2 |# " | | | * | |q2 " |# " | | | * | | q1 | |# " | | | * | q1| | |# " | | | * q1| | | q2 | q0 | | | | * | | |# " q2 | | | * | | |# " | q2 | | * | | |# " | | | * q2 | | |# " | | | * | q2 | q1 |# q1" | | | * | | | Esempio 3 cont. simbolo letto / simbolo scritto/ spostamento q# !/! D */! F q0 I/! D */* D q2 I/I D !/! D I/I S !/ I F Funzione di transizione ! q0 " D q1 */* S q1 q2 Dq0 | q1 | "Dq2 S D * " q# S D Esempio 4 Esempio di computazione Costruire una Macchina di Turing capace di ricopiare una stringa di input presa dall’alfabeto {a,b} L’input è della forma ! w ! l’output è della forma ! w ! w ! b/b/D a/a/D b/b/D a/a/D !/!/D a/X/D !/a/S X/X/D !/!/D !/!/F !/b/S b/Y/D !/!/S !/!/D q# X/a/S Y/b/S Y/Y/D a/a/D b/b/D a/a/D b/b/D a/a/S b/b/S !/!/S Esempio 5 Costruire una Macchina di Turing che riconosca il linguaggio L={an bn cn : n ! 0} Suggerimento: Costruire una macchina che opera in n stadi. Per ogni stadio La testina si muove verso destra per individuare il primo carattere a che viene rimpiazzato con un carattere *. La testina si muove quindi verso destra per trovare un carattere b che appena trovato viene ad essere sostituito ancora da un carattere *, quindi si va alla ricerca di un carattere c che verrà sostituito sempre da un carattere *. Una volta esaurito il ciclo la testina torna verso sinistra e si prosegue con un ulteriore ciclo. La macchina deve controllare se ci sono caratteri in più: Il procedimento termina quando la macchina è alla ricerca di un a e trova la fine stringa.