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.