MACCHINE DI TURING - Dipartimento di Matematica

MACCHINE DI TURING
La macchina di Turing è un automa con testina di scrittura/lettura su un nastro
"potenzialmente" illimitato. In ogni istante la macchina si trova in uno stato
appartenente ad un insieme fnito di stati e legge un carattere sul nastro. La funzione
di transizione in modo deterministico, sovrascrive il carattere, fa spostare la testina in
una direzione o nell'altra, fa cambiare lo stato.
Le macchine di Turing:
•
forniscono una defnizione formale del concetto astratto di algoritmo (altre
defnizioni sono state proposte e tutte quelle ragionevoli sono state dimostrate
equivalenti tra di loro.) Anche i linguaggi di programmazione sono
formulazioni ragionevoli ma hanno istruzioni troppo complesse e poco adatte a
dimostrare la non esistenza di algoritmi per certi problemi.
•
consentono di accettare (o di fare un riconoscimento parziale di) tutti i
linguaggi di tipo 0;
•
sono in grado di esprimere ogni procedimento di calcolo ("tesi di ChurchTuring").
Hilbert (1900) formula 23 problemi matematici per il XX secolo. Tra di essi:
•
l'aritmetica è consistente? (siamo certi che non sia possibile dimostrare
un'asserzione e la sua negazione?)
•
l'aritmetica è completa? (possiamo dimostrare ogni asserzione oppure la sua
negazione?)
•
l'aritmetica è decidibile? (esiste un algoritmo che consente di decidere se
un'asserzione è un teorema?)
Decimo problema di Hilbert: esiste un algoritmo che sa decidere se una equazione
polinomiale a coeffcienti interi in più variabili ha una soluzione intera oppure no?
Nel 1970 Matiyasevich ha risolto in negativo questo problema.
Kurt Gödel (1931) I seguenti 4 risultati sono di Gödel (da M. Machtey, P. Young,
“An Introduction to the General Theory of Algorithms”):
•
•
•
•
•
Non dimostrabilità della consistenza: per ogni teoria consistente, almeno
forte quanto l’aritmetica, la sua consistenza non può essere dimostrata
all’interno della teoria.
Incompletezza: ogni teoria consistente, almeno forte quanto l’aritmetica,
ammette una sentenza S tale che nè S nè ~S può essere dimostrata nella teoria.
Indecidibilità dei teoremi: per ogni teoria consistente, almeno forte quanto
l’aritmetica, non esiste algoritmo per decidere se una sentenza è un teorema
oppure no.
Indecidibilità della verità: non esiste algoritmo per decidere se una sentenza
dell’aritmetica è vera oppure no.
Indecidibilità della validità logica (Teorema di Church): non esiste
algoritmo per decidere se una sentenza matematica è vera in tutte le
interpretazioni (cioè logicamente valida).
Alan M. Turing (logico, matematico, 1912-1954) ha riformulato (1935-36) i risultati
di Gödel sostituendo il linguaggio formale dell’aritmetica con il modello delle
Macchine di Turing. Dimostra l'indecidibilità dell'aritmetica procedendo così:
•
defnisce il concetto di algoritmo introducendo la macchina che da lui prende il
nome
•
mostra che il problema della terminazione di una macchina di Turing è
formulabile come un’asserzione dell’aritmetica (mediante una Gödelizzazione).
•
mostra che la sua macchina non è in grado di risolvere il problema della
terminazione di una generica macchina di Turing su un generico input che
quindi è indecidibile. Ne segue che l'aritmetica stessa non è decidibile.
Da allora, dopo l'introduzione dei calcolatori e di modelli di calcolo più "realistici"
basati sul modello di Von Neumann, le macchine di Turing sono utilizzate:
•
per studiare algoritmi di riconoscimento di linguaggi formali
•
come modello elementare per defnire le funzioni calcolabili
•
per defnire concetti di complessità computazionale.
Def. Macchina di Turing:
M = < Γ, b, Q, q0, F, δ >
Γ
b
Q
q0
F
δ
alfabeto di simboli
carattere speciale, spazio bianco (blank)
insieme fnito di stati
stato iniziale
insieme di stati fnali
funzione di transizione (parziale)
δ: (Q-F) × (Γ∪{b}) → Q × (Γ∪{b}) × {d, s, i}
d, s, i indicano spostamento a destra, a sinistra e immobilità della testina
Γb = Γ∪{b}
N.B. Il nastro, pur essendo infnito, ha un numero fnito di caratteri diversi da b.
Es. (pag. 196-17): macchina che copia una parola di 0/1 a destra del primo blank
(esempio di macchina che calcola f(x)=x).
Es. macchina che entra in stati diversi su parole in L = { wwR | w∈{a,b}+} o fuori di L.
Es. macchina che scrive 0/1 su parole in Lequal = {w#w | w∈{a,b}*} o fuori di Lequal.
Modelli alternativi (su H. o B.)
M = < ∑, Γ, Q, q0, qaccept, qreject, δ >
(H). Il nastro è semi_infnito con alfabeto di input Σ e alfabeto di lavoro Γ che
contiene, oltre a Σ, almeno altri due caratteri, b (blank) e ç (primo carattere del
nastro). M non può modifcare ç, nè andare a sinistra di esso. Ha due soli stati fnali.
(B). In questo modello ç non c'è ed M non si può mai scrivere b.
Molte varianti di macchine di Turing (tutte computazionalmente equivalenti):
•
macchine a uno o più nastri
•
macchine deterministiche e non deterministiche
Possono essere usate come riconoscitori per riconoscere linguaggi L⊆ Σ*, con Σ ⊆ Γ,
oppure come trasduttori per calcolare funzioni f: Σ* → Σ* , con Σ ⊆ Γ.
Confgurazioni, transizioni e computazioni
Confgurazione di una macchina: stringa c = xqy appartenente al linguaggio:
LΓ . Q . RΓ
dove LΓ = Γ Γb*∪{ε}, mentre RΓ =Γb* Γ ∪ {ε}
iniziale:
quando x = ε, q = q0, y∈Γ*.
fnale:
quando q ∈ F
Step (o passo o mossa o transizione): applicazione della funzione di transizione ad
una confgurazione (|—): è relazione binaria tra due confgurazioni: ci |— ci+1
Computazione: sequenza, eventualmente infnita, di confgurazioni c0, c1,..., ci,... tali
che:
c0 |— c1 |— .... |— ci|—....
La chiusura rifessiva e transitiva di |— (indicata con |—*) è una relazione tra due
confgurazioni c e c' , che esprime l'esistenza di una computazione che da c porta a
c' tramite un numero fnito (eventualmente nullo) di passi.
Una computazione infnita non ha confgurazioni fnali.
Una computazione fnita c0, c1,..., cn e' massimale se non esiste una confgurazione
c tale che cn |— c .
Una computazione massimale si conclude o con una confgurazione fnale o con una
confgurazione in cui non e' defnita la funzione di transizione.
Computazione di accettazione è computazione massimale c0, c1,...., cn con
c0 iniziale e cn fnale.
Computazione di rifuto è computazione massimale c0, c1,...., c n con c0
iniziale e cn non fnale.
Una stringa y ∈ Σ* ( Σ ⊆ Γ) è accettata (rifutata) se la computazione avente c0 = q0y
è di accettazione (di rifuto).
Convenzioni.
Computazione di accettazione: responso affermativo
Computazione di rifuto:
responso negativo
Computazione infnita:
nessun responso
Tesi di Church-Turing
Ogni procedimento algoritmico espresso nell’ambito di un qualunque modello di
calcolo è realizzabile mediante una macchina di Turing.
RICONOSCIMENTO / ACCETTAZIONE
DI LINGUAGGI
Informalmente:
• Una macchina di T. M riconosce (decide) un linguaggio L⊆Σ* se per ogni x∈Σ* M
è in grado di stabilire se x∈L oppure no.
• Una macchina di T. M accetta un linguaggio L⊆Σ* se per tutte e sole le x∈L M è in
grado di stabilire l'appartenenza, ma se x∉L M non garantisce di stabilire la sua non
appartenenza.
Def. M = < Γ, b, Q, q0, F, δ > riconosce (decide) un linguaggio L⊆Σ* (con Σ⊆Γ) se
per ogni x ∈ Σ* esiste una computazione massimale:
•
q0x |—* αqβ
con α∈ LΓ , β∈ RΓ
•
x∈L ⇔ q∈F
Non e' detto che una macchina di Turing possa sempre riconoscere un linguaggio.
Def. M = < Σ, b, K, q0, F, δ > accetta un linguaggio L⊆Σ* (con Σ⊆Γ) se per tutte e
sole le x∈L esiste una computazione massimale:
•
q0x |—* αqβ
con α∈ LΓ , β∈ RΓ ,,
q∈F
Def. Un linguaggio è detto T-decidibile (decidibile secondo Turing) se esiste una
macchina di Turing che lo riconosce.
Def. Un linguaggio è detto T-semidecidibile (semidecidibile secondo Turing) se
esiste una macchina di Turing che lo accetta.
Per la tesi di Turing-Church possiamo parlare di linguaggio decidibile invece di Tdecidibile e di linguaggio semidecidibile invece di T-semidecidibile.
Es.
1) MT che riconosce
MT che accetta
indefnitamente
2) MT che riconosce
3) MT che riconosce
L = {wwR | w∈{a,b}+}
L = {wwR | w∈{a,b}+} e per le stringhe non in L cicla
Lequal = {w#w | w∈{a,b}*}
Lmiddle = {x1y | x,y∈{a,b}* con |x|=|y|}
Esercizio. 5.5 sul libro: modello con due soli stati fnali q y e qN per caratterizzare
l’accettazione o il rifuto di una stringa.
Esercizio. 5.6 sul libro: modello con un solo stato fnale qF ma con contenuti diversi
del nastro (Y, N) al termine di una computazione di accettazione o di rifuto. (Basta
marcare gli estremi)
CALCOLO DI FUNZIONI
Sia f : ∑*→∑* una funzione parziale (defnita su un sottoinsieme D di ∑* ) e sia Σ⊆Γ.
Def. Una macchina di Turing calcola la funzione parziale f se per tutte e sole le x
nel dominio D di defnizione di f esiste q∈F tale che:
q0x|—* xbqf(x)
N.B. Altra defnizione possibile:
q0x|—* qf(x)
Se f è una funzione a più argomenti la computazione richiesta è:
q0x1b....bxn |—* x1b ....bxn bqf(x)
Def. Una funzione (parziale) f per la quale esiste una macchina di Turing che la
calcola è detta T-calcolabile (calcolabile secondo Turing).
Per la tesi di Turing-Church possiamo parlare di funzione calcolabile invece di Tcalcolabile.
I concetti di calcolabilità (di funzioni) e di decidibilità o semidecidibilità (di
linguaggi, di predicati, di problemi decisionali) basati sulle macchine di Turing hanno,
per la tesi di Turing-Church, una validità che travalica il modello stesso.
La classe delle funzioni “intuitivamente” calcolabili coincide con la classe delle
funzioni T-calcolabili.
La classe dei linguaggi “intuitivamente” decidibili (semidecidibili) coincide con la
classe dei linguaggi T-decidibili (T-semidecidibili).
Esempi
1) MT che calcola f(x) = x per x ∈ {0,1}*.
M = < {0,1}, b, Q, q0, {q6}, δ >
2) TM che calcola la funzione f(n) = n+1, con n rappresentato in base 1, 2, 10.
3) TM che calcola la funzione f(n, m) = n+m, con n ed m rappresentati in base 2 e
separati dal simbolo b.
MT multitraccia
Il nastro è suddiviso in tracce. Su un nastro di h tracce la testina può leggere/scrivere h
caratteri contemporaneamente.
La corrispondenza tra una macchina con nastro suddiviso in tracce ed una normale
MT è immediata; basta osservare che se sulle tracce sono usati gli alfabeti Γ1, Γ2,....,
Γh, una MT corrispondente ha un alfabeto Γ con Γ = Γ1 x Γ2x....x Γh.
MT MULTINASTRO (MTM)
Def. Macchina di Turing a k nastri:
Z0
δk
M = < Γ, b, Z0, Q, q0, F, δk>
carattere speciale, iniziale
funzione di transizione (parziale)
δk : (Q-F) × (Γb)k → Q × (Γb)k × {d, s, i}k
Confgurazione:
q#α1↑β1#α2↑β2#....#αk↑βk
Confgurazione iniziale:
q0#↑x #↑Z0#....#↑Z0
cioè l'input x sta sul primo nastro; gli altri contengono il solo carattere Z0
Su MT multinastro con nastro di input monodirezionale a sola lettura il simbolo Z0 si
usa solo sui nastri di lavoro.
Es. 1. MTM per riconoscere xcxR con x∈{a, b}*.
2 nastri: uno di input monodirezionale a sola lettura e uno di lavoro; durante la
scansione di x, fno a c, x viene copiata sul nastro di lavoro (sostituendo a con A e b
con B); durante la scansione di xR si confrontano i caratteri con quelli sul nastro di
lavoro (la testina si muove a destra sul primo nastro, a sinistra sul secondo).
q0 #↑xcxR #↑Z0
q0 per scandire x,
q1 per scandire xR ,
q2
fnale
copiatura:
δ(q0 , a, Z0) = < q0 , a , A, d, d>
δ(q0 , b, Z0) = < q0 , b, B, d, d>
δq0 , a, b) = < q0 , a, A, d, d>
δ(q0 , b, b) = < q0 , b, B, d, d>
passaggio dalla copiatura alla verifca: δ(q0, c, b) = < q1, c, b, d, s >
verifca positiva:
δ(q1, a, A) = < q1, a, A, d, s>
δ(q1, b, B) = < q1, b, B, d, s>
confgurazione iniziale della MTM:
3 stati:
accettazione:
δ(q1, b, b) = < q2 , b, b, i, i>
N.B. Scrivere anche il digramma di transizione.
Esempio di computazione con input bacab:
|— q0 #b↑acab#B↑b
|— q0 #ba↑cab#BA↑b
q0 #↑bacab#↑Z0
|— q1 #baca↑b#↑BA |— q1 #bacab↑b#↑bBA
q1 #bac↑ab#B↑A
q2 #bacab↑b#↑bBA
|—
|—
Es. 2. MTM per riconoscere xxR con x∈{a,b}.
3 nastri: uno di input monodirezionale e due di lavoro: si copia tutta la stringa sui due
nastri di lavoro (sostituendo a con A e b con B); poi si posiziona la testina del secondo
(terzo) nastro sul primo (ultimo) carattere e si scandiscono i due nastri in senso
contrario effettuando i confronti.
confgurazione iniziale della MTM: q0 #↑w#↑Z0#↑Z0
copiatura :
δ(q0 , a, Z0, Z0) = < q0 , a, A, A, d, d, d >
δ(q0 , b, Z0, Z0) = < q0 , b, B, B, d, d, d >
δ(q0 , a, b, b)
= < q0 , a, A, A, d, d, d >
δ(q0 , b, b, b) = < q0 , b, B, B, d, d, d >
termine della copiatura: δ(q0, b, b, b) = < q0, b, b, b, i, s, s>
riposizionamento della seconda testina:
δ(q0 , b, A, A) = < q0 , b, A, A, i, s, i >
δ(q0 , b, B, A) = < q0 , b, B, A, i, s, i >
δ(q0 , b, A, B) = < q0 , b, A, B, i, s, i >
δ(q0 , b, B, B) = < q0 , b, B, B, i, s, I >
fne del riposizionamento della testina:
δ(q0 , b, b, A) = < q1 , b, b, A, i, d, i >
δ(q0 , b, b, B) = < q1 , b, b, B, i, d, i >
verifca:
δ(q1 , b, A, A) = < q1 , b, A, A, i, d, s >
δ(q1 , b, B, B) = < q1 , b, B, B, i, d, s >
δ(q1 , b, b, b) = < q2 , b, b, b, i , i, i >
Lemma.
- Se un linguaggio è decidibile è anche semidecidibile.
- Se un linguaggio è decidibile anche il suo complemento è decidibile.
- Se un linguaggio L è semidecidibile ed anche Lc è semidecidibile allora
L ed Lc sono decidibili.
(Per ogni stato qi di M e qj di Mc la macchina M' che decide L ha 2 nastri
e stati qij1 e qij2 nei quali rispettivamente simula M sul primo nastro nello
stato qi ed Mc sul secondo nastro nello stato qj).
Equivalenza tra MTM e MT
Teorema. Data una MTM M = < Γ, b, Q, q0, F, δk > a k nastri esiste una MT M' che
simula t passi di M in O(t2) passi, usando un alfabeto di cardinalità O( (2 |Γ|)k ).
Dim. Costruiamo una MT M' = < Γ' , b, Q', q0', F', δ' > con nastro suddiviso in 2k
tracce che simula M. Le k tracce di posto pari di M' rappresentano i k nastri di M;
sulle k tracce di posto dispari di M' con il carattere marcatore ↑ indichiamo la
posizione delle testine di M sui suoi k nastri.
Per simulare la funzione di transizione di M che è del tipo:
δk(qi, σi1,..,σik) = < qj, σj1,.., σjk, zj1,..,zjk >
l a δ' deve rintracciare le posizioni dei marcatori, scrivere e spostare i marcatori poi
cambiare stato.
Per rintracciare le posizioni dei marcatori, M' ricorda nei suoi stati le posizioni
relative (s, d, i) delle k testine di M rispetto alla sua. Quindi per ogni passo di M, M'
scorre la porzione del suo nastro dal marcatore più a sinistra fno a quello più a destra
e poi ritorna. Durante questa doppia passata M' aggiorna i contenuti del suo nastro e
simula un passo di M: nell'andata rileva i simboli dei nastri, nel ritorno simula i
cambiamenti. Il numero di passi che esegue per ogni passo di M è proporzionale alla
distanza (numero di caselle) tra i due marcatori più lontani. Dopo t passi due
marcatori possono essersi allontanati di al più di 2t caselle; se M esegue t passi, M' ne
esegue O(t2).
Per ciò che riguarda la cardinalità di Γb' abbiamo da codifcare stringhe di 2k simboli
così composte: 1 simbolo appartiene a Γ∪{b}; k-1 simboli appartengono a Γ∪{b, Z0};
k simboli appartengono a {b,↑}; quindi:
|Γ b '| = (|Γ|+1)(| Γ|+2)k-1 2k = O(2k (| Γ|+2)k)
MT NONDETERMINISTICHE (MTND)
Def. Macchina di Turing non deterministica:
M = < Γ, b, Q, q0, F, δN >
δN funzione parziale di transizione: (Q-F)× Γb → P(Q × Γb × {d, s, i})
Def. Grado di non determinismo di una macchina M
ν(M) = max |δN(qi, σj)|
Una computazione di una macchina non deterministica può essere rappresentata con
un albero di computazioni deterministiche dove i nodi rappresentano le
confgurazioni, gli archi le transizioni. Il grado di non determinismo coincide con il
massimo numero di fgli di un nodo di tale albero.
Def. Una MTND accetta una stringa x se esiste una computazione di accettazione a
partire dalla confg. c0 = q0x.
Def. Una MTND rifuta una stringa x se tutte le computazioni, a partire dalla confg.
c0 = q0x sono di rifuto.
Oss. Una MTND può non dare un responso a partire dalla confg. c0 = q0x.
Esempio. (Pag 216) MTDN che accetta stringhe su Γ={a, b} del tipo xyyz, con |y|≥2.
Equivalenza tra MTND e MT
Th. Data una MTND M con h nastri e grado di nondeterminismo d esiste una MT
M' con h+2 nastri equivalente. Se M accetta una stringa x in t passi, M' la accetta in
O(t dt) passi.
Dim. Sia h = 1. M' visita l'albero di computazione di M in ampiezza (perchè non in
profondità?). Per far questo si numerano da 1 a d gli elementi dell'insieme δN(q, σ),
per ogni coppia q, σ. Così ogni computazione di M di s passi è in corrispondenza
biunivoca con una sequenza di s cifre comprese tra 1 e d. M' ha 3 nastri:
nastro 1:
per contenere l'input
nastro 2:
per generare, in ordine lessicografco, sequenze di interi tra 1 e d
nastro 3:
per simulare la computazione di M indicata dalla sequenza di interi
presente sul nastro 2
Comportamento di M' : M' genera sul nastro 2, in ordine lessicografco, sequenze di
interi tra 1 e d, di lunghezza via via crescente, a partire dalla lunghezza s = 0, poi
lunghezza s=1, ecc.; per ogni sequenza generata:
- M' copia l'input dal nastro 1 sul nastro 3;
- usa gli s numeri della sequenza per scegliere, ad ogni passo, la transizione di
M da simulare tra le d possibili; per ogni numero della sequenza:
- se corrisponde ad una transizione possibile la simula (e se M raggiunge una
confgurazione fnale anche M' accetta), altrimenti l’esame della sequenza
termina con esito negativo;
Se su qualche foglia dell'albero di computazione di M c'e' uno stato fnale, allora M' lo
raggiunge in tempo fnito altrimenti M' non raggiunge mai uno stato fnale.
Dimostriamo che se M termina in t passi M' necessita di un numero di passi:
t
O(Σ s ds) = O(t dt)
s=0
L’uguaglianza si dimostra come segue. Dal fatto che:
t
Σ ds = (dt+1-1)/(d-1)
s=0
derivando entrambi i membri dell’uguaglianza rispetto a d si ottiene:
t
Σ s d s-1 = (tdt+1-(t+1)dt+1)/(d-1) 2 ≤ (tdt+1+1)/(d-1) 2 ≤ 4 (tdt+1+1)/d 2 = O(t dt-1))
s=1
poichè
4(d-1)2 ≥ d2 per d ≥ 2. Infne dal fatto che :
t
t
Σ s ds = d Σ s ds-1
s=0
s=1
segue che
t
Σ s ds = O (t dt).
s=0
NOTA BENE. Le MTND non sono più potenti delle MT. Una macchina non det. può "risolvere" un
problema in tempo polinomiale rispetto alla lunghezza dell'input, mentre la simulazione effettuata da
una macchina det. può richiedere tempo esponenziale.
Problema aperto. Esiste una simulazione più effciente? E' possibile simulare una macchina di
Turing non deterministica con una deterministica in tempo polinomiale?
MT IN FORMA RIDOTTA
Teorema. Per ogni MT M esiste una MT M' con nastro semi-infnito equivalente.
Dim. M' utilizza un nastro a 3 tracce. Il nastro infnito viene piegato in due sulla 1° e
3° traccia. Sulla 2° traccia un simbolo ↑ o ↓ indica se la testina della macchina M si
trova sulla parte semi-infnita sinistra o sulla parte semi-infnita destra. Un simbolo
speciale segnala l’inizio del nastro. (sul libro c’è la simulazione dettagliata)
Teorema. Per ogni MT M = < Γ, b, Q, q0, F, δ > esiste una MT equivalente
M '= < Γ', b, Q', q0', F', δ' > con | Γ'b | = 2.
Dim. I caratteri di Γb vengono codifcati con i 2 caratteri di Γ'b . (vedere es. sul libro)
LINGUAGGIO DI TIPO 0 <=> ACCETTATO DA MT
Teorema. Un linguaggio L è di Tipo 0 se e solo se è accettato da una MT.
Dim.
i) Tipo 0 -> accettato da MT (già vista una dimostrazione basata su tesi di Church)
Mostriamo come, dato un linguaggio L, generato da una grammatica G di tipo 0,
possiamo defnire una MT che lo accetta.
Per semplifcare utilizziamo una MTND M con 3 nastri ma sappiamo che esiste una
MT M' ad un solo nastro che può simulare M.
I 3 nastri vengono utilizzati nel seguente modo:
- N1 contiene la stringa x che deve essere esaminata,
- N2 contiene le forme di frase che via via vengono derivate da S e che devono essere
confrontate con la stringa x.
- N3 è di lavoro
Inizialmente su N2 c’è la forma di frase S. Poi, ad ogni passo, in modo non
deterministico, M applica alla forma di frase φ presente su N2 una possibile
produzione e rimpiazza, aiutandosi con il terzo nastro, la forma di frase φ con una
nuova forma di frase φ'. Poi verifca, naturalmente solo dopo aver applicato una
produzione che ha nel lato destro solo simboli terminali, se φ' coincide con x ed in
caso positivo M accetta x.
ii) accettato da MT -> Tipo 0
Sia M una MT con alfabeto di nastro Γb , che accetta un linguaggio L ⊆ ∑*⊆ Γ*.
Mostriamo come si può costruire una grammatica G di Tipo 0 che genera L.
Se M accetta L vuol dire che, per tutte e sole le x ∈ L, essa realizza una computazione
q0x |—* aqb, con q∈F (per semplicità supponiamo che esista un solo qF ∈F).
In corrispondenza della macchina M defniamo la grammatica G così.
Il suo alfabeto non terminale è costituito dai simboli ausiliari A 1, A2, A3, A4, A5, da
simboli corrispondenti agli stati di M e da simboli che rappresentano il contenuto di
due piste [.] : una superiore che contiene caratteri di Σ ∪ {b}, una inferiore che
contiene caratteri di Γ ∪ {b}. La grammatica opera nel seguente modo:
1. introduce lo stato iniziale
2. genera una parola di Σ* sulle due piste
3. genera un numero arbitrario di b a destra e a sinistra di x sulle piste
4. simula M sulla pista inferiore
5. verifca che la pista inferiore sia una confgurazione fnale e, solo in tal caso,
6. trasforma la forma di frase ottenuta in una stringa di Σ*.
Il resto a pag 242-43 del libro.